对要传递到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
。我可以很容易地做一些事情来替换那个角色,但这感觉像是一个黑客
尝试在从客户端到达的电子邮件末尾添加一个尾随/:
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);
这将用原始文本中的字符替换像"%"这样的字符。