【问题标题】:Encode Email to pass to Web.API编码电子邮件以传递给 Web.API
【发布时间】:2013-12-05 15:41:36
【问题描述】:

我需要将电子邮件地址发送到 Web.Api get 方法。在允许某人注册新帐户之前,我需要检查该电子邮件地址是否存在于我们的系统中。

我的第一个想法是encode 电子邮件地址,然后在Get 操作中时decode

网址看起来像这样 http://mysite/Api/RTSCredit/jharding%40email.com

但是,这总是会出现 404 响应错误

这里是WebApiConfig.cs

 config.Routes.MapHttpRoute(
      name: "DefaultApi",
      routeTemplate: "api/{controller}/{emailAddress}",
      defaults: new { id = RouteParameter.Optional }
  );

当我发送一个简单的字符串http://mysite/Api/RTSCredit/someemail

它会像我喜欢的那样触发 Get 操作,但显然无法返回有用的值。

这里是获取操作

[HttpGet]
public HttpResponseMessage Get([FromUri] string emailAddress)
{
    using (IRtsCreditDal rtsCreditDal = new RtsCreditDal())
    {
        var listOfExistingUsers = rtsCreditDal.GetUsersByEmail(emailAddress);
        if (listOfExistingUsers == null || listOfExistingUsers.Count == 0)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound, "not found");
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.OK); 
        }
    }
  }

我需要进行哪些调整才能将电子邮件发送至此Action

随着我玩得更远,它似乎不喜欢 URL 中的period。我可以轻松地做一些事情来替换那个角色,但感觉就像是 hack。

【问题讨论】:

标签: c# encoding asp.net-web-api


【解决方案1】:

尝试在来自客户端的电子邮件末尾添加尾随 /:

http://localhost:8800/api/users/user@gmail.com/

【讨论】:

  • 如果您希望电子邮件在您的路由中而不是在查询字符串中,这应该是真正的答案。
【解决方案2】:

将默认路由改回

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

从 Action 中删除 [FromUri] 属性,然后您应该可以使用 Maess 建议的 url 调用您的操作:

/mysite/Api/RTSCredit?emailAddress=jharding%40email.com

【讨论】:

  • 未找到与请求 URI 'localhost/Stc.RtsCredit.Web.BuyNow/Api/…' 匹配的 HTTP 资源。 在控制器“RTSCredit”上找不到与请求匹配的操作。
  • 奇怪?我复制了您的代码,并在此处进行了更改测试。
  • 实际上我回去并再次进行了编辑并且它有效。不知道我第一次错过了什么,谢谢!
【解决方案3】:

尝试解码你的字符串参数值。

String newEmailAddress = HttpUtility.HtmlDecode(emailAddress);

这会将“%”等字符替换为原始文本的字符。

【讨论】:

  • 这不是问题。该问题发生在从 URL 绑定模型中。
猜你喜欢
  • 2015-04-25
  • 2020-06-03
  • 2017-11-30
  • 1970-01-01
  • 2016-08-15
  • 2018-06-20
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
相关资源
最近更新 更多