我试图通过传递一个字符串作为参数来执行http.Get请求。
到目前为止我尝试过的角度代码是,
1)
var abseURL = 'http://localhost:17493/api/UsersApi/GetUsersByEmail/';
var email ='testemail@domain.com';
$http.get(abseURL + email).then(OnComplete, OnError);
2)
$http({
url: abseURL,
method: "GET",
params: { email: 'testemail@domain.com'}
}).then(OnComplete,OnError);
我的webApi控制器方法定义为,
[ActionName("GetUsersByEmail")]
[CamelCasedApiControllerAttribute]
public async Task<IHttpActionResult> GetUsersByEmail(string email)
{
Users users = await db.Users.FindAsync(email);
if (users == null)
{
return NotFound();
}
return Ok(users);
}
同样在我的Global.asax.cs文件中,我已按如下方式映射路由
protected void Application_Start(object sender, EventArgs e)
{
GlobalConfiguration.Configure(config =>
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "get", id = RouteParameter.Optional }
);
});
}
如果我传递一个Int参数,它会在我的WebApiController中找到正确的动作 但是当我用字符串参数更改调用时,它无法找到正确的操作方法。
答案 0 :(得分:0)
在我看来,路由没有设置来处理这个问题。您可以尝试使用以下代码:
var abseURL = 'http://localhost:17493/api/UsersApi/GetUsersByEmail/?email=';
var email ='testemail@domain.com';
$http.get(abseURL + email).then(OnComplete, OnError);
答案 1 :(得分:0)
您可以将电子邮件参数重命名为id:
public async Task<IHttpActionResult> GetUsersByEmail(string id)
{
Users users = await db.Users.FindAsync(id);
if (users == null)
{
return NotFound();
}
return Ok(users);
}