【问题标题】:Email Address in Web API GET requestWeb API GET 请求中的电子邮件地址
【发布时间】:2014-07-06 20:13:51
【问题描述】:

我正在研究在 ASP.NET Web API 中实现的 REST API。我们希望支持的一种方案是通过电子邮件地址对一些用户信息进行GET 请求。

理想情况下,客户端应该能够执行以下操作:

GET: /api/v1/users/email/your_email@your_domain.com

当我尝试运行此 GET 请求(例如通过浏览器)时,我会得到 404 Not Found 页面。

我做错了什么导致 IIS 无法为我的路由运行 Web API 路由处理程序?如果我尝试请求/api/v1/users/email/your_email,那么它会正确路由。

【问题讨论】:

  • 是因为“@”吗?你试过html编码吗?
  • 是的,我在将电子邮件包含在 url 之前尝试了对电子邮件进行 url 编码。

标签: http rest iis asp.net-web-api


【解决方案1】:

我只是设法为你测试了它。

主要问题是“IIS Web Core”混淆了“.”来自带有“。”的电子邮件地址从文件扩展名(例如 .aspx .p​​hp 等)

如果您删除“。”从电子邮件地址并将其替换为“-”或其他内容即可。

例如。

GET /api/values/me@gmail-com

 public string Get(string id)
        {
            return "value";
        }

希望对你有帮助。

您可能会看到如何删除默认的 IIS 模块,但我建议您重新考虑您的 API 设计。

【讨论】:

    【解决方案2】:

    您可以尝试以下方法,看看它是否适合您?

    GET: /api/v1/users/email?id=your_email%40your_domain.com
    

    这假设您的控制器的 Get 函数是这样的:Get(string id),即它接受一个名为 id 的字符串类型的参数。例如,如果您希望它采用名为“emailAddress”的参数,那么您可以这样做:

    GET: /api/v1/users/email?emailAddress=your_email%40your_domain.com
    

    注意@ 符号被编码为%40。这也假设您的控制器名为EmailController。

    【讨论】:

    • 我刚刚做了一个快速的 Web API 测试。我正在使用带有 ValuesController 类的默认 VS2013 ASP.NET Web 应用程序 Web API 模板。我更改了控制器的第二个 Get 函数,如下所示:public string Get(string id),在 Fiddler 中,我正在编写一个 GET http 请求,如下所示:GET http://.../api/values?id=your_email@your_domain.com(注意我在 Fiddler 中使用了未编码的 @ 符号)。这在响应中返回了预期的 value 字符串。如果我组成:http://.../api/values/your_email@your_domain.com,那么我会得到你提到的 404。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多