【问题标题】:Multiple actions were found that match the request找到多个与请求匹配的操作
【发布时间】:2017-03-17 06:38:10
【问题描述】:

我在使用 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;
        }
    }`

这是我的登录控制器

` // 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;
    }
}

} when i want to send an http post method to "/api/Logins/loginDetail" this error appears:

"找到多个与请求匹配的操作:Schoolmngt.Controllers.LoginsController 类型上的 loginDetail PostLogin 类型 Schoolmngt.Controllers.LoginsController"`

这是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 }
        );

我不明白为什么会这样。

【问题讨论】:

  • 你在控制器中的第二个动作是什么,你也可以添加有问题的
  • 错误很明显,两个方法同名,所以不知道选择哪个。这是不允许的。

标签: c# jquery


【解决方案1】:

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

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

有关详细信息,请参阅此。我认为这将解决您的问题。 here

【讨论】:

    猜你喜欢
    • 2018-11-04
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2017-10-26
    • 2016-10-18
    相关资源
    最近更新 更多