对要传递到Web.API的电子邮件进行编码

本文关键字:电子邮件 编码 API Web | 更新日期: 2024-07-23 02:13:14

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

我的第一个想法是encode电子邮件地址,然后decode一旦它进入Get Action

URL看起来像这样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操作,但显然无法返回有用的值。

这是Get Action

[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。我可以很容易地做一些事情来替换那个角色,但这感觉像是一个黑客

对要传递到Web.API的电子邮件进行编码

尝试在从客户端到达的电子邮件末尾添加一个尾随/:

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

将默认路由更改回

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

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

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

尝试解码字符串参数值。

String newEmailAddress = HttpUtility.HtmlDecode(emailAddress);

这将用原始文本中的字符替换像"%"这样的字符。