System.Web.Http
メソッド属性の使用方法がわかりません。Web APIコントローラー (ASP.Net MVC 4)にこのメソッドLogon
があります。Auth
public HttpResponseMessage Logon(string email, string password)
{
User user = UserSrv.Load(email);
if (user != null && user.CheckPassword(password))
return this.Request.CreateResponse<User>(HttpStatusCode.OK, user);
else
return this.Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid username or password");
}
WebApiConfig.csファイルはデフォルトです。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.Remove(config.Formatters.XmlFormatter);
}
}
そのまま、GETメソッドは を返します405 method not allowed
。PUT、HEAD、および私が試した他のすべての動詞と同様です。ただし、POST404 not found
の場合は、次の JSONで を返します。
{
"Message": "No HTTP resource was found that matches the request URI 'http://localhost:8080/api/Auth/Logon'.",
"MessageDetail": "No action was found on the controller 'Auth' that matches the request."
}
メソッド定義の前に属性を追加する[HttpPost]
と、まったく同じ結果が得られます。HttpGet
もちろんGETリクエストでもOKです。両方の属性を組み合わせても何も変わりません。POSTリクエストが 正しくルーティングされないのはなぜですか?
編集:
Uri がであり、クエリ パラメータがないため、POST要求は一致しません。パラメータとパラメータにhttp://localhost:8080/api/Auth/Logon
デフォルト値を設定すると、メソッドが一致します。しかし、MVC はリクエストの内容をアクションのパラメーターに一致させるのに十分賢いと思いました。引数の値を見つけるために、本当にコンテンツ ストリームを読み取る必要がありますか?email
password