ASP.NET MVC路由是否有区分int和字符串的方法
本文关键字:int 字符串 方法 MVC NET 路由 是否 ASP | 更新日期: 2023-09-27 17:59:17
假设我有两个类似的控制器操作
[Route("foo/bar/{id}")]
IHttpActionResult SomeController ( string id )
{
// ...
}
[Route("foo/bar/{id}")]
IHttpActionResult SameRouteAsAbove ( int id )
{
// ...
}
并且我向URL "foo/bar/123"
发出请求。IIS或其他任何东西是否将其视为命中SameRouteAsAbove
,因为该参数类似于数字,即使它可以作为数字的字符串表示?
是的,您可以使用正则表达式,并修改您想要的方式。
仅供参考: 您需要测试所有可能的场景。否则,如果两个路由都匹配给定的id,则会出现运行时错误。
public class ValuesController : ApiController
{
// GET api/values/1
[Route("api/values/{id:int}")]
public IHttpActionResult GetInteger(int id)
{
return Ok(id);
}
// GET api/values/abc
[Route("api/values/{id:regex([a-zA-Z])}")]
public IHttpActionResult GetString(string id)
{
return Ok(id);
}
}
不,当您发出请求说"foo/bar/123"
时,它确实是请求查询字符串的一部分,因此是string
,但它是您的MVC Model Binder
,它将负责将id
值正确映射到您的操作方法参数类型,因此它将根据您定义的类型进行映射。
根据您发布的代码,除非您单独指定路线,否则这将是模糊的。你也可以更进一步,像一样定义你的Route
值
[Route("foo/bar/{id:int}")]
IHttpActionResult SameRouteAsAbove ( int id )
{
// ...
}