在ASP.NET Web Api中进行路由时忽略部分查询字符串

时间:2014-11-14 09:18:05

标签: routing authorization asp.net-web-api

我使用appKey查询字符串参数来授权某些客户端应用程序。

示例请求: myserver / mydata?appKey = 12345

我有一个DelegatingHandler来验证appKey,所以当我真正提供请求时我不需要它。但是,即使我不需要它,我需要添加我的方法签名,如下所示,否则将返回NotFound。

public HttpResponseMessage GetMyData(string appKey)

有没有办法使用以下方法来处理请求,即使查询字符串有appKey参数?

public HttpResponseMessage GetMyData()

2 个答案:

答案 0 :(得分:1)

我仍然没有理解这一点。

无论如何:你尝试过路由属性吗?类似于:

[Route("myserver/mydata?appKey={key}")]
[HttpPost]
public public HttpResponseMessage GetMyData() { ... }

我没有测试它,但是感谢te route属性将被调用你的URL。试试吧。

此处有更多信息:

http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2

答案 1 :(得分:0)

与此同时,我找到了一个解决方案。仍然在消息处理程序代码中,我可以更改Message.RequestUri并删除查询字符串部分。在这种情况下,路由机制可以将调用路由到我想要的方法。

所以请求可以是 myserver / mydata?appKey = 12345 ,但处理它的代码可以是以下(没有appKey的迹象)

[Route]
public HttpResponseMessage GetMyData()