web-dev-qa-db-ja.com

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

MVC4プロジェクトにAPIコントローラーを作成しました

これは、APIの機能をテストするために作成したメソッドです

private string Login(int id)
{
    Employee emp = db.Employees.Find(id);
    return emp.Firstname;
}

localhost:xxxx/api/controllerName/Login?id=2でこのAPIにアクセスしようとすると、

{"$ id": "1"、 "メッセージ": "要求されたリソースはhttpメソッド 'GET'をサポートしていません。"}

何が悪いのですか?

また、これは私のAPI設定ファイルです

public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        var json = config.Formatters.JsonFormatter;
        json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
        config.Formatters.Remove(config.Formatters.XmlFormatter);
    }
11
ylinkz

メソッド修飾子をプライベートからパブリックに変更し、関連する受け入れ動詞をアクションに追加します

private string Login(int id)

への変更:

[HttpGet] // Or [AcceptVerbs("GET", "POST")]
public string Login(int id)

System.webserverタグ内のweb.configでhttpメソッドを受け入れることもできます。

<httpProtocol>
   <customHeaders>
      <clear />
      <add name="Access-Control-Allow-Origin" value="*" />
      <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
      <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
   </customHeaders>
</httpProtocol>
3
tonymayoral

[HttpGet]属性を追加してメソッドをパブリックにするという現在受け入れられている回答に加えて、正しい名前空間を使用していることを確認する必要があります。

  • MVCコントローラーはSystem.Web.Mvcを使用します
  • WebAPIコントローラーはSystem.Web.Httpを使用します
2
Jay bennie