Маршрут Web API не вызывается - PullRequest
       12

Маршрут Web API не вызывается

0 голосов
/ 26 октября 2018

Это мой конфиг веб-API:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
           name: "ReaderTags",
           routeTemplate: "Reader/{readerID}/Tags"
       );

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

    }
}

Я хочу, чтобы при вызове моего URL /Reader/abc/Tags он вызывал действие тегов моего ReaderController и передавал abc в качестве строкового параметра.

Но почему-то он использует маршрут DefaultAPI и пытается найти abc как действие в ReaderController.

Чего мне не хватает?

1 Ответ

0 голосов
/ 26 октября 2018

В сопоставлении маршрутов отсутствуют значения по умолчанию, которые позволили бы таблице маршрутов знать, какой контроллер и какое действие нужно вызвать для маршрутов, соответствующих шаблону

config.Routes.MapHttpRoute(
    name: "ReaderTags",
    routeTemplate: "Reader/{readerID}/Tags",
    defaults: new { controller = "Reader", action = "Tags" }
);

Шаблон маршрута также предполагает, что строковый параметр в действии имеет одно и то же имя: i.e: readerID.

public IHttpActionResult Tags(string readerID) {
    //...
}

А так как config.MapHttpAttributeRoutes(); также настроен, то же самое может быть достигнуто с помощью атрибутной маршрутизации вместо обычной маршрутизации, подобной этой

//GET Reader/abc/Tags
[HttpGet]
[Route("Reader/{readerID}/Tags")]
public IHttpActionResult Tags(string readerID) {
    //...
}
...