【问题标题】:Routing error: No HTTP resource was found that matches the request URI路由错误:未找到与请求 URI 匹配的 HTTP 资源
【发布时间】:2019-08-27 19:42:58
【问题描述】:

我正在尝试进行 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


    【解决方案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

    【讨论】:

      【解决方案2】:

      如果您在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() {
              //...
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-28
        • 1970-01-01
        • 1970-01-01
        • 2020-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多