У меня есть несколько собственных контроллеров, и маршрутизация в основном сделана из атрибутов. Проблема в том, что, когда я высмеиваю свои http-запросы с почтальоном, кажется, что программа не знает о предоставленной маршрутизации.
Мой контроллер выглядит так:
[RoutePrefix("register")]
public class RegisterController : ApiController
{
private readonly IRegisterService _service;
public RegisterController(IRegisterService service)
{
_service = service;
}
[HttpPost]
[Route("simple")]
public void RegisterSimple(RegisterArgs args)
{
_service.RegisterSimple(args);
}
}
Обратите внимание, что Global.asax.cs имеет вызов конфигурации, совместимой с Web Api 2:
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
// DI Registrations
}
}
... и WebApiConfig вызывает MapHttpAttributeRoutes ():
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Когда я пытаюсь вызвать метод POST из Почтальона с помощью uri
http://localhost:63575/api/register/simple
Я получаю следующий ответ:
{
"Message": "No HTTP resource was found that matches the request URI 'http://localhost:63575/api/register/simple'.",
"MessageDetail": "No action was found on the controller 'Register' that matches the request."
}
Я верю, что проблема в конфигурации маршрутизации. Я отладил его, и после обоих вызовов метода (config.MapHttpAttributeRoutes () и config.Routes.MapHttpRoute) в конфигурации есть только два маршрута: один с пустым RouteTemplate ("") и другой с предоставленным из вызова MappHttpRoute () ("api / {контроллер} / {ID} ").
У меня вопрос - как правильно настроить маршрутизацию через атрибуты?