【问题标题】:Web api: The requested resource does not support http method 'GET'Web api: 请求的资源不支持 http 方法 'GET'
【发布时间】:2013-03-05 12:50:05
【问题描述】:

我在我的 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","Message":"请求的资源不支持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);
    }

【问题讨论】:

  • 首先公开方法
  • @GiorgioMinardi,继续[HttpGet] // Or [AcceptVerbs("GET", "POST")] ...
  • @giorgio Minardi,@gdoron 哦。多谢你们。我的错。很抱歉用如此琐碎的事情打扰社区。它现在可以工作,但我期待它以 d 格式“名字:约翰”给我结果。它只是给“约翰”。这是正常行为吗?
  • 它返回“john”,因为你正在返回一个字符串,所以你得到一个 JSON 序列化的字符串。如果您想要一个具有 FirstName 属性的对象,则需要返回一个具有该属性的对象。

标签: asp.net asp.net-mvc json asp.net-web-api


【解决方案1】:

将方法修饰符从私有更改为公共,并将相关的接受动词添加到操作中

private string Login(int id)

改为:

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

【讨论】:

  • 我的方法被归类为public,但我仍然面临这个错误。
  • @Vijayaraghavan 发布您的代码,如果没有人帮忙,您可以 ping 我。我相信您会在几分钟内得到答案。
  • @gdoron 问题在将我的 API 域托管在 HTTP 而不是 HTTPS 后解决。早期的 API 是使用虚拟 SSL 证书托管的。这可能是原因。等待您的建议。
【解决方案2】:

您也可以在 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】:

除了当前接受的添加[HttpGet] 属性以使方法公开的答案外,您还需要确保使用正确的命名空间:

  • MVC 控制器使用System.Web.Mvc
  • WebAPI 控制器使用System.Web.Http

【讨论】:

  • 谢谢,这有助于解决我的问题,我花了几个小时弄清楚为什么它没有击中我的控制器
猜你喜欢
  • 2020-09-19
  • 2012-06-15
  • 2016-11-26
  • 1970-01-01
  • 2012-09-27
  • 2014-01-28
  • 2017-07-03
  • 2015-10-08
  • 2014-06-23
相关资源
最近更新 更多