我在我的服务器端有以下asp.net web api,它应该是电话号码或电子邮件地址作为用户登录名。它与电子邮件地址和电话号码完全正常,没有' +&#39 ;它的前缀是。当电话号码有+时,这个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();
}
提琴手请求: +电话号码:
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点击该服务。
第一个网址(上面列出的)无法访问该服务的原因可能是什么。
感谢您的帮助。
答案 0 :(得分:2)
可能是网址中的%2B
被接收或理解为+
,然后转换为空格。
您可以尝试通过编码%
符号来防止这种情况,这种做法称为双重编码。 +
然后变为%252B
。如果这有帮助,请告诉我。
更新,以使答案更完整(感谢J.H.):
您还需要确保Web.Config
中存在以下设置。
<system.webserver>
<security>
<requestFiltering allowDoubleEscaping="true">
</security>
</system.webserver>
有关详细信息,请参阅例如this answer