I know you can apply a wildcard in the route attribute to allow /
such as date input for example:
[Route("orders/{*orderdate}")]
The problem with wildcard is only applicable to the last paramter in URI. How do I solve the issue if want to have the following URI:
[Route("orders/{orderdate}/customers")]
Update:
I know there are few options to solve the issue by refactoring the code so please do not offer a solution something like:
- change the route template to
[Route("orders/customers/{orderdate}")]
- change the date to a different format (e.g.
"dd-mm-yyyy"
)
@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):
Assuming you have an API endpoint like so:
In the web.config you will need to set the
requestPathInvalidCharacters
to empty which tells the asp.net to allow all requestWhen 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
You then need to decode the request