Почему MapHttpAttributeRoutes () не добавляет маршруты из атрибутов? - PullRequest
1 голос
/ 31 марта 2019

У меня есть несколько собственных контроллеров, и маршрутизация в основном сделана из атрибутов. Проблема в том, что, когда я высмеиваю свои 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} "). У меня вопрос - как правильно настроить маршрутизацию через атрибуты?

1 Ответ

0 голосов
/ 31 марта 2019

Ваш префикс маршрута уровня контроллера должен начинаться с «api», как показано ниже:

[RoutePrefix("api/register")]
public class RegisterController : ApiController
...