2017-03-17 34 views
0

我有一个web api问题。我已经在我的LoginsController中为Web api写了这个动作。找到多个匹配请求的动作

[HttpPost] 
    public string loginDetail(Login obj) 
    { 
     Login email = db.Logins.Find(obj.email); 
     if (email == null) 
     { 
      return null; 
     } 


     Login detail = db.Logins.Find(obj.email); 
     if (detail.password.Equals(obj.password)) 
     { 
      string type = detail.type; 
      return type; 
     } 
     else 
     { 
      return null; 
     } 
    }` 

这是我LoginsController

` // GET:API /登录 公共IQueryable的GetLogins(){ 回报 db.Logins; }

// GET: api/Logins/5 
    [ResponseType(typeof(Login))] 
    public IHttpActionResult GetLogin(string id) 
    { 
     Login login = db.Logins.Find(id); 
     if (login == null) 
     { 
      return NotFound(); 
     } 

     return Ok(login); 
    } 

    [HttpPost] 
    public string loginDetail(Login obj) 
    { 
     Login email = db.Logins.Find(obj.email); 
     if (email == null) 
     { 
      return null; 
     } 


     Login detail = db.Logins.Find(obj.email); 
     if (detail.password.Equals(obj.password)) 
     { 
      string type = detail.type; 
      return type; 
     } 
     else 
     { 
      return null; 
     } 
    } 

    // PUT: api/Logins/5 
    [ResponseType(typeof(void))] 
    public IHttpActionResult PutLogin(string id, Login login) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (id != login.email) 
     { 
      return BadRequest(); 
     } 

     db.Entry(login).State = EntityState.Modified; 

     try 
     { 
      db.SaveChanges(); 
     } 
     catch (DbUpdateConcurrencyException) 
     { 
      if (!LoginExists(id)) 
      { 
       return NotFound(); 
      } 
      else 
      { 
       throw; 
      } 
     } 

     return StatusCode(HttpStatusCode.NoContent); 
    } 

    // POST: api/Logins 
    [ResponseType(typeof(Login))] 
    public IHttpActionResult PostLogin(Login login) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     db.Logins.Add(login); 

     try 
     { 
      db.SaveChanges(); 
     } 
     catch (DbUpdateException) 
     { 
      if (LoginExists(login.email)) 
      { 
       return Conflict(); 
      } 
      else 
      { 
       throw; 
      } 
     } 

     return CreatedAtRoute("DefaultApi", new { id = login.email }, login); 
    } 

    // DELETE: api/Logins/5 
    [ResponseType(typeof(Login))] 
    public IHttpActionResult DeleteLogin(string id) 
    { 
     Login login = db.Logins.Find(id); 
     if (login == null) 
     { 
      return NotFound(); 
     } 

     db.Logins.Remove(login); 
     db.SaveChanges(); 

     return Ok(login); 
    } 

    protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      db.Dispose(); 
     } 
     base.Dispose(disposing); 
    } 

    private bool LoginExists(string id) 
    { 
     return db.Logins.Count(e => e.email == id) > 0; 
    } 
} 

} “找到了多个动作匹配的要求,即:loginDetail的类型Schoolmngt.Controllers.LoginsController PostLogin的类型Schoolmngt.Controllers.LoginsController” when i want to send an http post method to "/api/Logins/loginDetail" this error appears:

`

这是WebApiConfig.cs

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

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

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

我不明白为什么会发生这种情况。

+0

你在控制器中的第二个动作是什么,你是否也可以添加这个问题 – Adil

+0

这个错误很清楚,两个方法具有相同的名称,所以它不知道选择哪一个。这是不允许的。 – CodingYoshi

+0

检查此答案:http://stackoverflow.com/a/14534618/5358389 – daniell89

回答

0

在这种情况下,我会建议使用属性路由。例如,你可以这样命名你的Action方法,

[Route("Login")] 
[HttpPost] 
public string loginDetail(Login obj) 
{ 
... 
} 

欲了解更多信息,请参阅这一个。我认为这会解决你的问题。 here

相关问题