【问题标题】:Wep api routing does not workWeb api 路由不起作用
【发布时间】:2018-10-10 22:55:17
【问题描述】:

我在我的服务器端有以下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();
}

提琴手请求: + 在电话号码中:

http://localhost:56771/api/Account/%2B18888888888/ResetCode?lan=en-US

这不会影响我的 api。

不带 + 的 Fiddler 请求:

http://localhost:56771/api/Account/18888888888/ResetCode?lan=en-US

此 URL 命中服务。

带有电子邮件的提琴手请求:

http://localhost:56771/api/Account/abc%40GMAIL.COM/ResetCode?lan=en-US

此 URL 命中服务。

第一个 url(上面列出的)无法访问服务的原因可能是什么。

感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    可能是 URL 中的%2B 被接收或理解为+,然后转换为空格。

    您可以尝试通过同时编码% 符号来防止这种情况,这种做法称为双重编码。 + 然后变为 %252B。让我知道这是否有帮助。

    更新,让答案更完整(感谢 J.H.):

    您还需要确保Web.Config 中存在以下设置。

    <system.webserver>
        <security>
            <requestFiltering allowDoubleEscaping="true">
        </security>
    </system.webserver>
    

    有关这方面的更多信息,请参阅例如this answer

    【讨论】:

    猜你喜欢
    • 2014-03-12
    • 2018-01-01
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2017-09-19
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多