【问题标题】:Asp.NET Web Api 2 Routing parametersAsp.NET Web Api 2 路由参数
【发布时间】:2016-08-29 08:25:41
【问题描述】:

我有以下路线:

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

我希望这条路线仅适用于以下模式(服务名称应始终为身份):

api/identity/{anyController}/{id}

现在我只需将路线模板更改为

即可完成此操作
routeTemplate: "api/identity/{controller}/{id}",

但是我无法从Request.GetRouteData(); 读取“service_name”,因为它不是命名参数。

有没有更简单的方法来做到这一点,而不是创建一个 ActionFilter 来过滤在这种情况下服务名称不是“Identity”的所有请求。

【问题讨论】:

  • 看不懂,换成“api/identity/{controller}/{id}”就没有service_name))
  • @ElvinMammadov 如果您将模板硬编码为 api/identity,当您尝试检查 RouteData 字典中的 service_name 时,没有带有 service_name 键的条目。
  • 但是使用 Route 配置,您可以使用 Attribute Routing。 Route config 是个好办法。
  • 在控制器上方使用RoutePrefix 属性。喜欢[RoutePrefix("api/identity")],然后在您的操作上方使用[Route("{id}")]。它使您的网址像api/identity/id?id=

标签: c# asp.net asp.net-web-api asp.net-web-api2


【解决方案1】:

您可以在受影响的方法上方添加Route 属性。例如,

[Route("api/identity/{controller}/{id}", Order = 1)]
[HttpGet]
public IHttpActionResult DoSomethingHere(int id)
{
    // Do some magic here
}

看看这篇文章Attribute Routing in ASP.NET Web API 2

【讨论】:

  • 我希望避免属性混乱,但我想这是一种方法
猜你喜欢
  • 1970-01-01
  • 2018-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2012-09-05
  • 1970-01-01
相关资源
最近更新 更多