如果我有下面的代码,当url中缺少firstname时,我收到404错误。见下面的第一个例子。我不确定为什么路由在这种情况下不起作用,当属性名称在url中时,是否存在值的占位符。我的解决方案是创建另一个路由并使用另一个url格式,但更多的工作。如果我有很多参数并且中间的一些参数缺少它们的值,那么该单一路径是否可以处理所有实例呢? 如何在下面的示例中创建可以处理四种组合的单一路径?两者都不见了。两者都存在。其中一个缺失。
[HttpGet]
[Route("getcustomer/firstname/{firstname?}/status/{status?}")]
public IHttpActionResult GetCustomer(string firstname = null, string status = null)
{
... some code ...
}
**Example URLs:**
http://.../getcustomer/firstname//status/valid" causes 404
http://.../getcustomer/firstname/john/status/active" good
http://.../getcustomer/firstname/john/status/" good
答案 0 :(得分:1)
这是设计上的。您可能需要创建另一个操作以允许该操作。还就框架的构建方式而言。结束段是应该是可选的。
您需要重新考虑您的设计。
例如
[RoutePrefix("api/customers")]
public class CustomersController : ApiController {
[HttpGet]
[Route("")] // Matches GET api/customers
public IHttpActionResult GetCustomer(string firstname = null, string status = null) {
... some code ...
}
}
示例网址
http://...api/customers
http://...api/customers?status=valid
http://...api/customers?firstname=john&status=active
http://...api/customers?firstname=john