javascript - Web api 路由不起作用

标签 javascript c# .net asp.net-mvc asp.net-web-api

我的服务器端有以下 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/

相关文章:

c# - 从 DataTable 填充 WinForms TreeView

.net - VB.net 中的 #warning 指令

javascript - Greasemonkey 脚本中未定义的 iframe

javascript - react map 不是一个功能

javascript - 动态脚本标签的安全问题

c#实现带有子类类型参数的接口(interface)方法

c# - 在单线程公寓中运行代码并返回值,我无法设置当前的公寓模型

javascript - 并非所有 CSS 都在 Vuetify 中与 Vue.js 和 Webpack 一起运行

c# - 从其他类调用类方法不起作用

c# - 为什么 BufferedStream.Write 会抛出 "This stream does not support seek operations"?