いくつかのPOCOクラスを使用してMVC4WebApiアプリケーションを作成し、EFを使用して読み取り/書き込みなどのクイックデフォルトコントローラーを作成しました。
どういうわけか、これら2つの方法を一緒に機能させることはできませんが、最初の方法は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 }
);
以前の方法(1番目と2番目の方法)が一緒に機能しない理由と、可能であればそれを機能させるために何ができるかを知りたいです。同様のメソッドを作成できないのは少し奇妙に思えるので、何かがあると確信しています。