Http,Get with string参数返回http 404

时间:2014-10-13 14:25:40

标签: angularjs asp.net-web-api2

我试图通过传递一个字符串作为参数来执行http.Get请求。

到目前为止我尝试过的角度代码是,

1)

 var abseURL = 'http://localhost:17493/api/UsersApi/GetUsersByEmail/';
 var email ='testemail@domain.com';
 $http.get(abseURL + email).then(OnComplete, OnError);
  • 返回http 404错误

2)

$http({
        url: abseURL,
        method: "GET",
        params: { email: 'testemail@domain.com'}
    }).then(OnComplete,OnError);
  • 以上http.get请求返回Http 500错误

我的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中找到正确的动作   但是当我用字符串参数更改调用时,它无法找到正确的操作方法。

2 个答案:

答案 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);
}