Методы веб-API никогда не перенаправляются на - PullRequest
0 голосов
/ 18 мая 2018

Я немного раньше играл с web api, и мне всегда кажется, что я сталкиваюсь с одной и той же проблемой, когда мои методы не маршрутизируются.

В моем приложении есть пакет с приложениями, и я могуувидеть, что он захватывает запросы, которые я делаю, просматривая строку запросов над подписью моего метода, но они фактически никогда не выполняются, и App Insights сообщает о неудачном запросе.

Вот мой WebApiConfig

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

Вот мой простой контроллер и метод

public class ExampleController : ApiController
{
    [HttpGet]
    [ActionName("Test")]
    public IHttpActionResult Test()
    {
        return Ok();
    }
}

Это часть приложения MVC, поэтому, когда я запускаю проект, в моем браузере отображается представление Home / Index.Затем я иду к почтальону и создаю новый запрос Get, указывающий на

http://localhost:port/api/Example/Test

Но это приводит к 404.

Я, должно быть, делаю что-то не так, поскольку всегда сталкиваюсь с этим

1 Ответ

0 голосов
/ 18 мая 2018

Отображение по умолчанию для WebAPI не включает действие как часть маршрута, так как по умолчанию ожидает, что контроллер будет основным идентификатором для ресурса, и глагол GET / POST / PUT / DELETE, чтобы определить, какая операциявыполняется.

Таким образом, даже если вы вручную указываете ActionName для «Test», в обработчике по умолчанию нет ничего для сопоставления с шаблоном.

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

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

Тем не менее, вы можете обнаружить, что предпочитаете маршрутизацию атрибутов (я знаю, что я делаю), которую вы можете применить к своему контроллеру следующим образом:

[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
    [HttpGet]
    [Route("Test")]
    public IHttpActionResult Test()
    {
        return Ok();
    }
}

ToЧтобы включить маршрутизацию атрибутов, вам необходимо добавить следующее в конфигурацию запуска:

config.MapHttpAttributeRoutes();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...