编码电子邮件以传递给Web.API

时间:2013-12-05 15:41:36

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

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

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

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动作,但显然无法返回有用的值。

以下是获取行动

[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,我需要进行哪些调整?

由于我一直在玩,所以它似乎不喜欢网址中的period。我可以轻松地做一些事情来取代那个角色,但感觉就像是黑客。

3 个答案:

答案 0 :(得分:23)

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

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

答案 1 :(得分:2)

将您的默认路线更改回

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

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

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

答案 2 :(得分:-1)

尝试解码字符串参数值。

String newEmailAddress = HttpUtility.HtmlDecode(emailAddress);

这会将'%'等字符替换为原始文字的字符。