在 ASP.NET 编码的引号中阻止请求到达路由
In ASP.NET encoded quotes prevent request from reaching the route
在 ASP.NET 中编码的引号阻止请求到达路由。我该如何解决这个问题?
就我而言,问题如下。
我正在发出请求:https://localhost:44364/api/businessAttributes/contractors/foo
并且请求到达了我的控制器:我能够调试控制器并且看到一切正常。我也收到回复:[{"code":"1code","title":"\"foo\" short (1code)","id":"1code"}]
.
然后我尝试以下请求:https://localhost:44364/api/businessAttributes/contractors/%22foo%22
但请求根本没有到达我的控制器。
这是我在 BE 上的路线:
[HttpGet]
[Route("api/businessAttributes/contractors/{searchString?}")]
public async Task<IEnumerable<BusinessAttributeSimpleListEntryDto>> GetContractors(string searchString = null)
我在这里错过了什么?
解决我能找到的问题的唯一方法是将控制器更改为
[HttpGet]
[Route("api/businessAttributes/contractors")]
public async Task<IEnumerable<BusinessAttributeSimpleListEntryDto>> GetContractors([FromUri]string searchString = null)
并请求 https://localhost:44364/api/businessAttributes/contractors?searchString=%22foo%22
。
有没有更好的方法来解决这个问题?
更新
根据评论部分的建议,我尝试将 /
附加到请求的末尾,以获得以下请求:https://localhost:44364/api/businessAttributes/contractors/%22foo%22/
。那没有帮助。
您必须 url 将 " 编码为 %22
您可以简单地使用 EscapeUriString
string encodedUrl = Uri.EscapeUriString(url);
到达终点后,您的 searchString 将是 "\"foo\""
或 "foo"
,而不是 foo
。确保你处理好。
在 ASP.NET 中编码的引号阻止请求到达路由。我该如何解决这个问题?
就我而言,问题如下。
我正在发出请求:https://localhost:44364/api/businessAttributes/contractors/foo
并且请求到达了我的控制器:我能够调试控制器并且看到一切正常。我也收到回复:[{"code":"1code","title":"\"foo\" short (1code)","id":"1code"}]
.
然后我尝试以下请求:https://localhost:44364/api/businessAttributes/contractors/%22foo%22
但请求根本没有到达我的控制器。
这是我在 BE 上的路线:
[HttpGet]
[Route("api/businessAttributes/contractors/{searchString?}")]
public async Task<IEnumerable<BusinessAttributeSimpleListEntryDto>> GetContractors(string searchString = null)
我在这里错过了什么?
解决我能找到的问题的唯一方法是将控制器更改为
[HttpGet]
[Route("api/businessAttributes/contractors")]
public async Task<IEnumerable<BusinessAttributeSimpleListEntryDto>> GetContractors([FromUri]string searchString = null)
并请求 https://localhost:44364/api/businessAttributes/contractors?searchString=%22foo%22
。
有没有更好的方法来解决这个问题?
更新
根据评论部分的建议,我尝试将 /
附加到请求的末尾,以获得以下请求:https://localhost:44364/api/businessAttributes/contractors/%22foo%22/
。那没有帮助。
您必须 url 将 " 编码为 %22
您可以简单地使用 EscapeUriString
string encodedUrl = Uri.EscapeUriString(url);
到达终点后,您的 searchString 将是 "\"foo\""
或 "foo"
,而不是 foo
。确保你处理好。