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

Routing 在ASP.NET Web Api中路由时忽略部分查询字符串,routing,authorization,asp.net-web-api,Routing,Authorization,Asp.net Web Api,我正在使用appKey查询字符串参数来授权一些客户端应用程序 请求示例:myserver/mydata?appKey=12345 我有一个DelegatingHandler来验证appKey,所以我以后在实际服务请求时不需要它。然而,即使我不需要它,我也需要像下面那样将它添加到我的方法签名中,否则将返回NotFound public HttpResponseMessage GetMyData(string appKey) 即使查询字符串具有appKey参数,是否有方法使用以下方法处理请求 pu

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

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

我有一个DelegatingHandler来验证appKey,所以我以后在实际服务请求时不需要它。然而,即使我不需要它,我也需要像下面那样将它添加到我的方法签名中,否则将返回NotFound

public HttpResponseMessage GetMyData(string appKey)
即使查询字符串具有appKey参数,是否有方法使用以下方法处理请求

public HttpResponseMessage GetMyData()

我还是不明白为什么会这样

无论如何:您是否尝试过路由属性?类似于:

[Route("myserver/mydata?appKey={key}")]
[HttpPost]
public public HttpResponseMessage GetMyData() { ... }
我并没有对它进行测试,但由于te路由属性的存在,它将使用您的URL调用。试试看

更多信息请点击此处:


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

因此,请求可以是thismyserver/mydata?appKey=12345,但处理它的代码可以是以下代码(没有appKey符号)


不太清楚。你的意思是像
public HttpResponseMessage GetMyData(string appKey=null)
这样的东西吗?不是。我的意思是,我想要的是以下内容:public HttpResponseMessage GetMyData()这太让人困惑了,请更具体一些,你想要的确切URL和方法签名应该是什么……对不起,伙计们!我希望此方法
public HttpResponseMessage GetMyData()
(它没有参数)在委托处理程序处理querystring之后,处理此请求myserver/mydata?appKey=12345(有一个querystring参数)。默认情况下,它不起作用,因为默认路由尝试将querystring参数绑定到方法参数中。与此同时,我找到了一个解决办法。在消息处理程序代码中,我可以更改message.RequestUri并删除查询字符串部分。在这种情况下,路由机制可以将调用路由到我想要的方法!原因是查询字符串中的appKey由我的应用程序的授权层(特别是委托处理程序)处理。我不希望这成为请求实际处理的一部分(即控制器及其方法)。默认情况下,web api路由不是这样工作的。如果查询字符串中有内容,那么我正在寻找解决方案。正如我所说,我发现的方法是更改Message.RequestUri并从查询字符串中删除appKey,同时仍在委托处理程序中。
[Route]
public HttpResponseMessage GetMyData()