如何将ASP.NET Web API属性路由与复杂对象参数一起使用?

时间:2014-01-17 21:51:24

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

我有一个Web API操作,如下所示:

[HttpGet]
[Route("api/query/hello/{query}")]
public HttpResponseMessage Hello([FromUri]Query query)
{
    return null;
}

其中Query类具有名为QueryText的公共字符串属性。当我点击以下网址时,收到404错误:

/api/query/hello?QueryText=bacon

这在我开始使用属性路由之前有效。如果我没有参数或基本类型参​​数,我可以使属性路由工作。但是对于复杂的参数,我得到404s。属性路由如何使用复杂的操作参数?它是否与FromUri属性兼容?

2 个答案:

答案 0 :(得分:7)

这里的解决方案是路由定义中的{query}令牌是多余的。删除它,如下所示,修复了问题:

[Route("api/query/hello")]

答案 1 :(得分:1)

因为您正在从URL中读取,所以需要[FromUri]属性。您的路线应该类似于:

public HttpResponseMessage Hello([FromUri]Query query)
{
    //Implement whatever
    return null;
}

/ api / {Controller Name} / hello?QueryText = bacon

然后应该正常工作。

模型绑定器将获取您提供的任何查询参数,然后尝试绑定Query对象内的任何内容。在你首先使用它之后我会担心路线属性。