C# 找到多个与请求匹配的操作
我的web api有问题。我已在我的C# 找到多个与请求匹配的操作,c#,jquery,C#,Jquery,我的web api有问题。我已在我的LoginsControllerfor web api中编写了此操作 [HttpPost] public string loginDetail(Login obj) { Login email = db.Logins.Find(obj.email); if (email == null) { return null; } Logi
LoginsController
for 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;
}
}`
这是我的登录控制器
`
//获取: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;
}
}
}
当我想向“/api/Logins/loginDetail”发送http post方法时,会出现以下错误:
“找到多个与请求匹配的操作:类型Schoolmngt.Controllers.LoginsController上的loginDetail。”
在类型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 }
);
我不明白为什么会发生这种情况。在这种情况下,我建议使用属性路由。例如,您可以这样命名您的操作方法
[Route("Login")]
[HttpPost]
public string loginDetail(Login obj)
{
...
}
欲了解更多信息,请参阅本页。我想这会解决你的问题。
您在控制器中的第二个操作是什么,您是否可以补充一点,即问题中的错误非常明显,两个方法具有相同的名称,因此它不知道选择哪个方法。这是不允许的。请检查以下答案: