我正在玩Web API和MVC路由。我注意到一些我觉得很奇怪的东西。当您使用route属性时,框架不太宽容。您会注意到,当id是路径时,第一部分中的Get方法失败,并且它必须是查询字符串的一部分。但是在第二部分中,它将id作为任一个。我原以为第一部分中的代码表现得像第二部分中的代码。据我所知,MVC框架将尝试路由流量,如果必须,则从查询字符串中获取值,这是代码的第二部分正在进行的操作。显然,当您使用route属性时,它不会这样做。有人可以解释一下吗?
---------------------第一部分(具有Route属性的代码)
WebApiConfig.cs
config.Routes.MapHttpRoute("DefualtRouting",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
TestController.cs
[Route("api/test/")] //(notice routing attribute)
public IHttpActionResult Get(string id)
{
return Ok();
}
以下是我定位这些网址时所获得的内容
---------------------第二部分(没有Route属性的代码) WebApiConfig.cs
config.Routes.MapHttpRoute("DefualtRouting",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
TestController.cs
public IHttpActionResult Get(string id)
{
return Ok();
}
以下是我定位这些网址时所获得的内容
答案 0 :(得分:0)
也许我很困惑。但您的属性应如下所示:
[Route("api/test/{id}")] //(notice routing attribute)
public IHttpActionResult Get(string id)
{
return Ok();
}
您还可以在WebApiConfig.cs中使用属性路由和配置路由。或者这只是你的后备?
我只使用其中一种。
如果您尝试将ID设为可选,我认为您可以这样做:
[Route("api/test/{id:string?}")] //(notice routing attribute)
public IHttpActionResult Get(string id)
{
return Ok();
}