我在我的服务器端遵循asp.net网络api,它应该接受用户登录时的电话号码或电子邮件地址,name.It可以很好地处理电子邮件地址和电话号码,而无需在it.When电话号码后面加上“+”,这个api就不会被击中。
类级路由前缀:[RoutePrefix("api/Account")]
[HttpPost]
[HttpOptions]
[Route("{UserName}/ResetCode")]
public IHttpActionResult ResetCode([FromUri]string userName, [FromUri]string lan = null)
{
service.ResetCode(userName, language);
return Ok();
}Fiddler请求:电话号码为+:
http://localhost:56771/api/Account/%2B18888888888/ResetCode?lan=en-US这并没有影响我的api。
Fiddler请求没有+:
http://localhost:56771/api/Account/18888888888/ResetCode?lan=en-US此Url访问该服务。
Fiddler请求与电子邮件:
http://localhost:56771/api/Account/abc%40GMAIL.COM/ResetCode?lan=en-US此Url访问该服务。
第一个url(上面列出的)无法访问服务的原因是什么?
谢谢你的帮助。
发布于 2018-04-30 20:21:16
可能是URL中的%2B被接收或理解为+,然后转换成一个空格。
您可以尝试通过对%符号进行编码来防止这种情况发生,这种做法称为双重编码。然后+变成%252B。如果这有帮助的话请告诉我。
更新,以使答案更完整(感谢J.H.):
您还需要确保Web.Config中存在以下设置。
<system.webserver>
<security>
<requestFiltering allowDoubleEscaping="true">
</security>
</system.webserver>有关这方面的更多信息,请参见例如this answer
https://stackoverflow.com/questions/50107394
复制相似问题