要求されたリソースはHTTPメソッド 'GET'をサポートしていません


102

ルートは正しく構成されており、メソッドには装飾されたタグがあります。「要求されたリソースは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 }
);

回答:


226

System.Webの属性を使用してください。WebAPIアクションのHttp名前空間:

    [System.Web.Http.AcceptVerbs("GET", "POST")]
    [System.Web.Http.HttpGet]
    public string Auth(string username, string password)
    {...}

これが機能しない理由は、MVC名前空間 からの属性を使用していたためですSystem.Web.MvcSystem.Web.Http名前空間のクラスはWebAPI用です。


11
くそー。ありがとう!こんな小さなことで時間を無駄にしてしまうなんて信じられないくらい
笑ってしまいそうでした。–ルシノ

1
確かに、これが正しい答えである理由の説明は、確かにここに必要です!
Jaxidian 2013

6
説明付きの編集された回答。
マギーイン2013

2
RouteSystem.csで[System.Web.Http.AcceptVerbs( "GET"、 "POST")]と[System.Web.Http.HttpGet]を指定して、各APIにこれを追加する必要がないようにできますか?
ギリッシュグプタ

8
このプロジェクトの10個のAPIのうちの1つだけでこれを行う必要があったのはなぜですか?他の9つのAPIとまったく同じ方法でAPIを作成しました。いらいらする。
Dan Beaulieu

3

この属性を使用するだけです

[System.Web.Http.HttpGet]

このコード行は必要ありません:

[System.Web.Http.AcceptVerbs("GET", "POST")]

3

私の場合、ルートシグネチャはメソッドパラメータとは異なりました。IDはありましたが、documentIdをパラメーターとして受け入れていたため、問題が発生しました。

[Route("Documents/{id}")]   <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
  ..
}

あなたを祝福:) +1
シャイコーエン

2

同じ問題が発生していました。すでに4つのコントローラーが正常に動作し、正常に機能していますが、これを追加すると、「要求されたリソースはHTTPメソッド 'GET'をサポートしていません」を返しました。私はここと他のいくつかの関連記事ですべてを試しましたが、Dan Bが答えに応じて述べたように、私はすでに他の人がうまく働いていたので、解決策に無関心でした。

私はしばらく歩いて戻ってきて、すぐにコントローラーを追加したときに、他のコントローラーの下にある「ApiController」クラスではなく、「コントローラー」クラスの下にネストされていることに気付きました。Visual Studioで.csファイルをビルドするために間違ったスキャフォールディングオプションを選択したと想定しています。そのため、System.Web.Http名前空間を含め、親クラスを変更しました。追加の属性やルーティングなしですべてが機能します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.