Route parameter with slash “/” in URL

后端 未结 4 1994
盖世英雄少女心
盖世英雄少女心 2020-12-01 13:32

I know you can apply a wildcard in the route attribute to allow / such as date input for example:

[Route(\"orders/{*orderdate}\")]
4条回答
  •  不思量自难忘°
    2020-12-01 14:21

    @bet.. I think the genericUriParserOptions is no longer applicable to .net 4.5 or later..

    Also as suggested by @JotaBe, you might need to correctly decode the url request. In most case the %2F will be automatically translated to a slash '/'. So if you need to escape it you will need to decode the '%' char in the first place.. so your URL: will look something like: www.domain.com/api/orders/23%252F06%252F2015/customers

    Notice the characters '%252F' will be translated to the actual '%2F'

    EDIT

    Ok here is the complete solution (Tried it and working for me):

    1. Assuming you have an API endpoint like so:

      [Route("orders/{date}/customers")]
      public HttpResponseMessage Get(string date)
      {
      }
      
    2. In the web.config you will need to set the requestPathInvalidCharacters to empty which tells the asp.net to allow all request

      
                          
      
      
          
            
          
      
      
    3. When the client sending the request to the API you will need to make sure to escape the '%' like so:

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

    4. You then need to decode the request

      [Route("orders/{date}/customers")]
      public HttpResponseMessage Get(string date)
      {
              DateTime actualDate = DateTime.Parse(System.Net.WebUtility.UrlDecode(date)); // date is 23/06/2015
      }
      

提交回复
热议问题