我创建了一个带有一些 POCO 类的 MVC 4 WebApi 应用程序,并使用 EF 创建了一个具有读/写等功能的快速默认控制器。
现在由于某种原因我不能让这两种方法一起工作,但是第一种方法是 EF 创建的。简而言之,我想通过 ID 和用户名查找用户。
// GET api/xxx
public User GetUser(string id)
{
User user = db.Users.Find(id);
if (user == null)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
return user;
}
以上工作。这不起作用。
// GET api/xxx
public User GetUserByUsername(string username)
{
var user = db.Users.First(s => s.Username == username);
if (user == null)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
return user;
}
但是通过将其更改为以下内容并将一些添加到 webapi 配置中,然后以下工作:
// GET api/xxx
[HttpGet]
[ActionName("username")]
public User GetUserByUsername(string id)
{
var user = db.Users.First(s => s.Username == id);
if (user == null)
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));
}
return user;
}
并将 WebApiConfig 更改为:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Action-name
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我想知道为什么以前的方法不能一起工作(第一个和第二个),如果可能的话我可以做些什么来让它工作。我很确定它有一些东西,因为不能创建类似的方法似乎有点奇怪。