Я борюсь с этим уже некоторое время.Я искал по всему интернету, не нашел никакого решения.
Я хотел бы создать проект webapi с несколько настраиваемой маршрутизацией.Используя VS 2019, проект имеет тип ASP.NET WebApi в .NET Core 2.2.Маршрутизация должна быть такой:
Базовое приложение должно находиться на URL-адресе, аналогичном "https://my.server.com/myapi". URL-адреса, которые будут вызываться, имеют форму" https://my.server.com/myapi/{InstanceName}/{CommandName}?{customParams}"
У меня определен один контроллерв моем проекте, и я хотел бы перенаправить все запросы к этому контроллеру, где instanceName может быть параметром всех методов, содержащихся в контроллере, поэтому я бы получил значение для этого параметра.CommandName в основном совпадает с «действием» RouteData по принципам MVC.Как вы можете видеть, контроллер не указан, так как все обрабатывается одним контроллером.
До сих пор я пытался настроить маршрутизацию следующим образом:
Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "MyRoute",
template: "{instance}/{action}",
defaults: new { controller = "MyController" });
});
}
MyController.cs
[Route("/")]
[ApiController]
public class MyController : ControllerBase
{
[HttpGet("{instance}/info")]
public JsonResult Info(string instance, InfoCommand model)
{
// Just return serialized model for now.
var result = new JsonResult(model);
return result;
}
}
Но это не работает.Я получаю 415 ответ от (я думаю) веб-сервера, когда я звоню, например,
https://my.server.com/myapi/MYINSTANCE/info?param1=value1¶m2=value2
Во время отладки из VS этот URL выглядит следующим образом:
https://localhost:12345/MYINSTANCE/info?param1=value1¶m2=value2
, но я думаю, что это не должно* не имеет значения для маршрутизации.
В лучшем случае (если поставить [Route("{instance}")]
над контроллером и [HttpGet("info")]
над инфо-методом), я получаю ответ 404
, чего я тоже не хочу.
Я даже пытался создать свой собственный ControllerFactory, но это тоже не сработало (изменение контроллера в методе создания ControllerFactory и добавление другого параметра в RouteData).
Как настроить маршрутизацию таким образом?Это вообще возможно?Я все еще хотел бы использовать все другие функции MVC (привязка модели, правильная маршрутизация, функции аутентификации и т. Д.), Только эту маршрутизацию я не могу понять.