我知道您可以在路由属性中应用通配符以允许/
例如日期输入例如:
[Route("orders/{*orderdate}")]
通配符的问题仅适用于 URI 中的最后一个参数。如果想要具有以下 URI,我该如何解决该问题:
[Route("orders/{orderdate}/customers")]
Update:
我知道通过重构代码来解决问题的选项很少,因此请不要提供类似以下的解决方案:
- 将路线模板更改为
[Route("orders/customers/{orderdate}")]
- 将日期更改为不同的格式(例如
"dd-mm-yyyy"
)
@bet..我觉得genericUriParserOptions
不再适用于 .net 4.5 或更高版本。
也按照建议@JotaBe,您可能需要正确解码 url 请求。大多数情况下%2F
将自动转换为斜杠'/'
。因此,如果您需要转义它,您将需要解码'%'
首先是 char ..所以你的 URL: 看起来像:www.domain.com/api/orders/23%252F06%252F2015/customers
注意人物'%252F'
将被翻译成实际的'%2F'
EDIT
好的,这是完整的解决方案(尝试过并为我工作):
-
假设您有一个如下所示的 API 端点:
[Route("orders/{date}/customers")]
public HttpResponseMessage Get(string date)
{
}
-
In the 网络配置你需要设置requestPathInvalidCharacters
toempty 告诉asp.net允许所有请求
<system.web>
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters=""/>
</system.web>
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
-
当客户端向 API 发送请求时,您需要确保转义'%'
像这样:
www.domain.com/api/orders/23%252F06%252F2015/customers
-
然后您需要解码请求
[Route("orders/{date}/customers")]
public HttpResponseMessage Get(string date)
{
DateTime actualDate = DateTime.Parse(System.Net.WebUtility.UrlDecode(date)); // date is 23/06/2015
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)