Wep api路由不起作用

时间:2018-04-30 19:59:23

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

我在我的服务器端有以下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点击该服务。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

您可以尝试通过编码%符号来防止这种情况,这种做法称为双重编码。 +然后变为%252B。如果这有帮助,请告诉我。

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

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

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

有关详细信息,请参阅例如this answer