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

WebAPI routing cuts wildcard parameter on a question mark

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

我有的是:

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

对于未知的 url,例如:

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

我希望 "parameter" 变量包含:

test?a=1&b=2

相反,它包含:

test

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

你不能那样做。根据定义,URL 段不包含查询字符串。

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

Request.RequestUri.Query

您只需将 url 参数与此连接起来即可获得您需要的内容。这包括前导问号:

The Query property contains any query information included in the URI. Query information is separated from the path information by a question mark (?) and continues to the end of the URI. The query information returned includes the leading question mark.

来自 Uri.Query Property

如果您仍然想强制它以不同的方式工作,您需要包含您自己的自定义路由提供程序,实现您自己的 IDirectRouteProvider and registering it. See this:

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