【问题标题】:Jquery AJAX GET with an email and ASP.NET ApiController带有电子邮件和 ASP.NET ApiController 的 Jquery AJAX GET
【发布时间】:2015-07-29 17:44:11
【问题描述】:

我有一个根据用户名或电子邮件检查用户是否存在的操作:

[Route("check/{usernameOrEmail}")]
[ResponseType(typeof(bool))]
public IHttpActionResult GetUserExists(string usernameOrEmail)
{
    var user = db.Users.FirstOrDefault(u => u.Name == usernameOrEmail) ??
        db.Users.FirstOrDefault(u => u.Email == usernameOrEmail);
    if (user == null)
    {
        return Ok(false);
    }
    return Ok(true);
}

我目前使用的 AJAX 方法如下所示:

var url = "api/users/check/" + usernameOrEmail;
$.get(url, function (data) {
    ...//Do stuff
});

这对于一个简单的用户名非常有效,但是当使用诸如“test@test.com”之类的电子邮件时,我收到错误:

POST https://localhost:44301/api/users/check/test@test.com 404(未找到)

我相信这是因为 URL 中的 @ 符号。我知道我可以使用POST 而不是GET 并将usernameOrEmail 放在正文中,但我想尊重RESTful HTTP 动词。

有没有一种简单的方法可以编码 @ 符号(或任何其他符号)以在 URL 中发送并由我的 ApiController 解析?

【问题讨论】:

    标签: jquery asp.net ajax http


    【解决方案1】:

    你必须对你的 URL 进行编码,试试encodeURIComponent( ) javascript 方法。

    来自链接:

    此函数对特殊字符进行编码。此外,它还编码 以下字符: , / ? : @ & = + $ #

    编码一个 URI:

    var uri = "http://w3schools.com/my test.asp?name=ståle&car=saab";
    var res = encodeURIComponent(uri);
    

    res 的结果将是:

    http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dst%C3%A5le%26car%3Dsaab
    

    您可以使用this网站测试您的编码和解码。

    @ encoded -> %40 (UTF-8)
    

    以下是服务器端解决方案:

    试试HttpServerUtility.HtmlEncode.net框架方法。

    【讨论】:

    • OP 需要在客户端而不是服务器上编码。
    • encodeURI 不起作用,但我使用了var uri = "api/users/check/" + encodeURIComponent(usernameOrEmail),它输出“/api/users/check/test%40test.com”,它也有一个404是@中的句点吗987654330@现在搞砸了?
    • 是的,我在几分钟前更新了我的答案。编码 uri 文档:“此函数对特殊字符进行编码,除了: , / ? : @ & = + $ # (使用 encodeURIComponent() 对这些字符进行编码)。” @samueldavidson
    • 好的,你知道为什么我仍然得到 404 吗?该句点使 ASP.NET 感到困惑,尝试 test%40testcom 工作正常,但只要我添加句点或 %2E,我就会得到一个 404。也许我应该针对这个特定问题提出一个新问题?
    • 我是通过谷歌搜索发现的。它只是 ASP.NET 的一个错误,将/ 附加到 URL 的末尾修复了 404。所以我的 URL 是localhost:44301/api/users/check/test%40test.com/。有点愚蠢,但它的作品!
    【解决方案2】:
    猜你喜欢
    • 2012-03-01
    • 1970-01-01
    • 2020-07-06
    • 2019-11-12
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2018-07-24
    相关资源
    最近更新 更多