12

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

APIの機能をテストするために作成したメソッドは次のとおりです

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

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

{"$ 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);
    }
4

3 に答える 3

23

メソッド修飾子をprivateからpublicに変更し、関連するaccept動詞もアクションに追加します

private string Login(int id)

への変更:

[HttpGet] // Or [AcceptVerbs("GET", "POST")]
public string Login(int id)
于 2013-03-16T22:44:59.513 に答える
3

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>
于 2013-03-29T18:17:08.453 に答える
3

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

  • MVCコントローラーはSystem.Web.Mvc
  • WebAPIコントローラーはSystem.Web.Http
于 2017-07-27T14:12:01.067 に答える