URL 中带有斜杠“/”的路由参数

2024-03-23

我知道您可以在路由属性中应用通配符以允许/例如日期输入例如:

[Route("orders/{*orderdate}")]

通配符的问题仅适用于 URI 中的最后一个参数。如果想要具有以下 URI,我该如何解决该问题:

[Route("orders/{orderdate}/customers")]

Update:

我知道通过重构代码来解决问题的选项很少,因此请不要提供类似以下的解决方案:

  1. 将路线模板更改为[Route("orders/customers/{orderdate}")]
  2. 将日期更改为不同的格式(例如"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

好的,这是完整的解决方案(尝试过并为我工作):

  1. 假设您有一个如下所示的 API 端点:

    [Route("orders/{date}/customers")]
    public HttpResponseMessage Get(string date)
    {
    }
    
  2. In the 网络配置你需要设置requestPathInvalidCharacterstoempty 告诉asp.net允许所有请求

    <system.web>
        <httpRuntime targetFramework="4.5" requestPathInvalidCharacters=""/>                
    </system.web>
    <system.webServer>
        <security>
          <requestFiltering allowDoubleEscaping="true" />
        </security>
    </system.webServer>
    
  3. 当客户端向 API 发送请求时,您需要确保转义'%'像这样:

    www.domain.com/api/orders/23%252F06%252F2015/customers

  4. 然后您需要解码请求

    [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(使用前将#替换为@)

URL 中带有斜杠“/”的路由参数 的相关文章

随机推荐