我需要向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
。我可以轻松地做一些事情来取代那个角色,但感觉就像是黑客。
答案 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);
这会将'%'等字符替换为原始文字的字符。