Веб-сервер nanoFramework не распознает маршруты с атрибутами
Я настроил ESP32-WROVER в качестве веб-сервера, используя библиотеку nanoFramework.WebServer. Он запускает метод маршрута, когда я использую маршрут без атрибутов (//192.168.1.8/led), но не когда я использую маршрут с атрибутами (//192.168.1.8/led/on)
using (WebServer server = new WebServer(80, HttpProtocol.Http, new Type[] { typeof(ControllerGpio) }))
{
// Start the server.
server.Start();
Thread.Sleep(Timeout.Infinite);
}
class ControllerGpio
{
private static GpioController _gpioController = new GpioController();
private static int ledPin = 2;
[Route("led")]
public void Led(WebServerEventArgs e)
{
try
{
var rawUrl = e.Context.Request.RawUrl.TrimStart('/');
Debug.WriteLine($"Handling request {rawUrl}");
var args = rawUrl.Split('/');
if (args.Length < 2)
{
WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
return;
}
// If the pin is not open
if (!_gpioController.IsPinOpen(ledPin))
{
// Open pin
_gpioController.OpenPin(ledPin);
// Set pin mode to output
_gpioController.SetPinMode(ledPin, PinMode.Output);
}
if (args[1].ToLower() == "on")
{
_gpioController.Write(ledPin, true);
}
else if (args[1].ToLower() == "off")
{
_gpioController.Write(ledPin, false);
}
else
{
WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
return;
}
WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.OK);
}
catch (Exception)
{
WebServer.OutputHttpCode(e.Context.Response, HttpStatusCode.BadRequest);
}
}
}
Случай: //192.168.1.8/led Вывод отладки: светодиод обработки запроса
Случай: //192.168.1.8/led/on Вывод отладки:
2 ответа
Похоже на ошибку. Пожалуйста, поднимите вопрос на нашем GitHub здесь .
Не забудьте добавить приведенный выше образец кода, чтобы его было легче воспроизвести. Спасибо!
Наверное нужно декорировать дополнительными атрибутами
[Route("led"), Route("led/on"), Route("led/off")]
public void Led(WebServerEventArgs e)