如何创建一个处理缺少中间参数的路由属性?

时间:2017-07-13 01:41:00

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

如果我有下面的代码,当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

1 个答案:

答案 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