104

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

5 に答える 5

234

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用です。

于 2012-10-07T05:45:24.700 に答える
4

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

[Route("Documents/{id}")]   <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
  ..
}
于 2018-11-30T01:26:22.107 に答える
3

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

[System.Web.Http.HttpGet]

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

[System.Web.Http.AcceptVerbs("GET", "POST")]
于 2018-07-30T09:52:29.317 に答える
3

http(s)エンドポイントにアクセスするときにを使用して、この問題を解決しました。私がアクセスしていたルートは、を介して利用できませんでしたhttp。したがって、ルートが使用可能なプロトコルを確認します。

于 2020-09-03T15:06:55.657 に答える
2

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

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

于 2019-01-08T22:52:37.297 に答える