WebAPI路由在问号上剪切通配符参数

时间:2015-05-07 10:36:49

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

我在控制器中有一个路径,它应该匹配url的部分内容并将其放入字符串参数中。

我拥有的是:

    [Route("api/proxy/{proxyId}/{*parameter}")]
    public Task<HttpResponseMessage> Mediate(int proxyId, string parameter)

并且对于未知的网址,例如:

  

http://localhost/api/proxy/1/test?a=1&b=2

我希望“参数”变量包含:

  

测试?a = 1&amp; b = 2

相反,它包含:

  

测试

如何在问号后指定不切割所有内容的路线? 对于这个特殊情况,我可以从Request.RequestUri对象中提取它,但它将是......不优雅的。

1 个答案:

答案 0 :(得分:3)

你做不到。根据定义,URL段不包括查询字符串。

但是,您可以做一些非常简单的事情:在WebApi控制器中,您具有包含查询字符串的Request属性:

Request.RequestUri.Query

您只需将url param与此连接即可获得所需内容。这包括主要问号:

  

Query属性包含URI中包含的任何查询信息。查询信息通过问号(?)与路径信息分开,并继续到URI的末尾。返回的查询信息包括前导问号。

来自Uri.Query Property

如果您仍想强制它以不同的方式工作,您需要包含自己的自定义路由提供程序,实现您自己的IDirectRouteProvider并注册它。请参阅:get a list of attribute route templates asp.net webapi 2.2

但做这样的事情是不自然的。为什么事情与所有其他人理解和使用的标准方式完全不同?