C# ASP.NET Web Api 2-基于属性的路由-如何强制参数仅查询字符串?
我正在从事一个WebAPI2项目,我正在使用基于属性的路由。以下是一条示例路线:C# ASP.NET Web Api 2-基于属性的路由-如何强制参数仅查询字符串?,c#,asp.net,asp.net-web-api,asp.net-mvc-routing,query-string,C#,Asp.net,Asp.net Web Api,Asp.net Mvc Routing,Query String,我正在从事一个WebAPI2项目,我正在使用基于属性的路由。以下是一条示例路线: [路由(“{id:int}”,Name=“GetEmployeeById”)] [HttpGet] 公共IHttpActionResult GetEmployee(内部id) { ... } 这适用于以下URL: ://host/employee/12345 ://主机/员工?id=12345 我希望第一种形式(URI中的参数)是不允许的,只有第二种形式(查询字符串)可以工作 我试过的 大多数情况下,我都试着
[路由(“{id:int}”,Name=“GetEmployeeById”)]
[HttpGet]
公共IHttpActionResult GetEmployee(内部id)
{
...
}
这适用于以下URL:
- ://host/employee/12345
- ://主机/员工?id=12345
实际上并不会阻止URI表单工作。实现这一点的两种方法。这里有一些选择
//Default configuration, you can see here the "id" parameter which enables action/id matching
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//It should look like this
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}"
);
您还可以使用自定义属性来执行此操作。事实上,我对原始代码的理解是错误的。查询字符串参数不适用于我指定的路由。相反,我可以这样做:
[路由(“,Name=“GetEmployeeById”)]
[HttpGet]
公共IHttpActionResult GetEmployee(内部id)
{
...
}
这会满足我的要求。它必须从函数的参数列表中获取名称id
不幸的是,这意味着我不能再对它施加约束,但我想我可以在函数中进行验证。有一个名为“[FromUri]”的属性,可以用来修饰方法参数,模型绑定器将尝试从查询字符串中查找该参数,在这种情况下,它可能对您没有帮助,但了解它是一件好事,因此,如果您想将搜索选项(例如)传递给Get方法,则可以使用它
希望对您有所帮助。目前,我的整个路由配置如下:
config.maphttpAttribute路由()代码>。我没有使用模板路由。对我来说,这似乎不能解决我的问题。为什么我要重命名参数id
是我想要的名称,我只希望它只能从查询字符串(而不是URI)设置。我遗漏了什么吗?[FromUri]
似乎强制使用一个参数,该参数通常从查询字符串中获取。这对这个问题没有帮助,但我确实觉得它很有趣;谢谢