ルートは正しく構成されており、メソッドには装飾タグがあります。 「要求されたリソースはHTTPメソッド 'GET'をサポートしていません」というメッセージがまだ表示されますか?
[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
public string Auth(string username, string password)
{
// Décoder les paramètres reçue.
string decodedUsername = username.DecodeFromBase64();
string decodedPassword = password.DecodeFromBase64();
return "value";
}
私のルートは次のとおりです。
config.Routes.MapHttpRoute(
name: "AuthentificateRoute",
routeTemplate: "api/game/authentificate;{username};{password}",
defaults: new { controller = "Game",
action = "Auth",
username = RouteParameter.Optional,
password = RouteParameter.Optional },
constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { controller = "Home", id = RouteParameter.Optional }
);
System.Web .Http名前空間の属性をWebAPIアクションで使用してください:
[System.Web.Http.AcceptVerbs("GET", "POST")]
[System.Web.Http.HttpGet]
public string Auth(string username, string password)
{...}
動作しない理由は、MVC namespace System.Web.Mvc
の属性を使用していたためです。 System.Web.Http
名前空間のクラスは、WebAPI用です。
私の場合、ルートシグネチャはメソッドパラメータとは異なりました。 idはありましたが、documentIdをパラメーターとして受け入れていたため、問題が発生しました。
[Route("Documents/{id}")] <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
..
}
同じ問題が発生していました。すでに4つのコントローラーが正常に機能していましたが、これを追加すると「要求されたリソースはHTTPメソッド「GET」をサポートしていません」を返しました。ここと他のいくつかの関連記事ですべてを試しましたが、Dan B.が答えに応じて言及したように、私はすでに他の人がうまく働いていたので、ソリューションには無関心でした。
しばらく歩いて戻って、すぐにコントローラーを追加すると、他のコントローラーの「ApiController」クラスではなく「Controller」クラスの下にネストされていることに気付きました。 Visual Studioで.csファイルをビルドするために間違った足場オプションを選択したと仮定しています。そのため、System.Web.Http名前空間を含め、親クラスを変更しましたが、追加の属性やルーティングなしですべてが機能します。
この属性を使用してください
[System.Web.Http.HttpGet]
このコード行は必要ありません:
[System.Web.Http.AcceptVerbs("GET", "POST")]