【问题标题】:Web API custom routes with same name but different HTTP methods具有相同名称但不同 HTTP 方法的 Web API 自定义路由
【发布时间】:2023-04-10 03:20:01
【问题描述】:

我们正在尝试在我们的 API 上实现 VersionedRoutes,并在一个类中将我们的路由声明为:

new VersionedRoute(
    version,
    "GetRiskReports",
    "/Members/{id}/Cpin/RiskReports",
    new RouteValueDictionary
    {
        {"controller", "Members"},
        {"action", "GetRiskReports"},
        {"id", RouteParameter.Optional}
    }),
new VersionedRoute(
    version,
    "PostRiskReports",
    "/Members/{id}/Cpin/RiskReports",
    new RouteValueDictionary
    {
        {"controller", "Members"},
        {"action", "PostRiskReports"},
        {"id", RouteParameter.Optional}
    })

控制器方法声明如下:

[HttpGet]
public HttpResponseMessage GetRiskReports(int id)

[HttpPost]
public HttpResponseMessage PostRiskReports(int id)

显然,此时,对 url /Members/123/Cpin/RiskReports 的 GET 请求可以路由到第一个路由,但是 POST 请求无法路由,因为它匹配第一个路由但控制器方法被标记仅作为 GET。无论如何将HTTP方法添加到自定义路由。客户端不想更改路由名称。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-web-api asp.net-web-api-routing


    【解决方案1】:

    在您的 RouteConfig.cs 中,注册这样的配置:

    config.Routes.MapHttpRoute("GetRiskReports", "Members/{id}/Cpin/RiskReports" ,
          new {
                 controller = "Members",
                 action = "GetRiskReports"
          },
          new {
                HttpMethod = new HttpMethodConstraint(HttpMethod.Get)
           }
    );
    
    config.Routes.MapHttpRoute("PostRiskReports", "Members/{id}/Cpin/RiskReports" ,
          new {
                 controller = "Members",
                 action = "PostRiskReports"
          },
          new {
                HttpMethod = new HttpMethodConstraint(HttpMethod.Post)
           }
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2021-05-29
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      相关资源
      最近更新 更多