【问题标题】:WebAPI routing cuts wildcard parameter on a question markWebAPI 路由在问号上剪切通配符参数
【发布时间】:2015-07-17 21:08:18
【问题描述】:

我在控制器中有一个路由,它应该匹配 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

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

测试?a=1&b=2

相反,它包含:

测试

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

【问题讨论】:

  • [Route("api/proxy/{proxyId}/{parameter}/{a}/{b}")]这样扩展你的路由模板怎么样?
  • 不知道参数会是什么
  • 或许你能找到额外的线索here...
  • 其中一种可能性是创建一个自定义 Route 属性,该属性将从查询字符串中收集参数。

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


【解决方案1】:

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

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

Request.RequestUri.Query

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

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

来自Uri.Query Property

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

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

【讨论】:

  • 好的,我最终使用了 Request.RequestUri.Query。
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
相关资源
最近更新 更多