路由错误:未找到与请求URI匹配的HTTP资源

问题描述 投票:0回答:2

我正在尝试进行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 }
);
c# asp.net-web-api asp.net-web-api2 asp.net-web-api-routing
2个回答
1
投票

改变一下:

[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
投票

只要您在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 }
        );
    }
}

参考Attribute Routing in ASP.NET Web API 2: Enabling Attribute Routing

并假设

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

    //GET v1/reports
    [Route("")]
    [HttpGet]
    public IHttpActionResult GetReports() {
        //...
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.