我的服务器端有以下 asp.net web api,它应该将电话号码或电子邮件地址作为用户登录名。它与电子邮件地址和电话号码完美配合,无需添加“+”前缀。当电话号码有 + 此 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
此网址命中服务。
通过电子邮件发送 Fiddler 请求:
http://localhost:56771/api/Account/abc%40GMAIL.COM/ResetCode?lan=en-US
此网址命中服务。
第一个网址(上面列出)无法访问服务的原因可能是什么。
感谢您的帮助。
最佳答案
URL 中的 %2B
可能被接收或理解为 +
,然后转换为空格。
您可以尝试通过对 %
符号进行编码来防止这种情况发生,这种做法称为双重编码。 +
则变为 %252B
。让我知道这是否有帮助。
更新,使答案更加完整(感谢 J.H.):
您还需要确保 Web.Config
中存在以下设置。
<system.webserver>
<security>
<requestFiltering allowDoubleEscaping="true">
</security>
</system.webserver>
有关这方面的更多信息,请参阅this answer
关于javascript - Web api 路由不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50107394/