Ошибка маршрутизации: не найден ресурс HTTP, соответствующий URI запроса - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь сделать вызов API

http://localhost:56578/v1/reports

, чтобы вызвать мой GetReports() метод.

Однако я продолжаю получать сообщение об ошибке в теме.

Я следую за документами MS здесь через префикс маршрута:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#route-prefixes

Что я делаю не так?

ReportV1Controller.cs

[Authorize]
[RoutePrefix("v1/reports")]
....
....
[Route("")]
public IHttpActionResult GetReports()

WebApiConfig.cs

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

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Изменить с этого:

[RoutePrefix("v1/reports")]

на это:

[RoutePrefix("api/v1/reports")]

из-за:

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

См. routeTemplate: "api/{controller}/{action}/{id}", вы сказали префикс для всехпути будут api, {controller}/{action}/{id} являются заполнителями

Вывод: если вы собираетесь везде использовать префикс v1, поставьте его вместо api

0 голосов
/ 06 апреля 2019

То, что у вас должно работать, при условии, что вы включили маршрутизацию атрибутов в WebApiConfig

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Attribute routing.
        config.MapHttpAttributeRoutes(); //<-- THIS HERE

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

Ссылка Маршрутизация атрибутов в ASP.NET Web API 2: Включение маршрутизации атрибутов

И при условии

[Authorize]
[RoutePrefix("v1/reports")]
public class ReportV1Controller : ApiController {

    //GET v1/reports
    [Route("")]
    [HttpGet]
    public IHttpActionResult GetReports() {
        //...
    }
}
...