2013-03-16 129 views
8

我对我的MVC4项目的Web API:请求的资源不支持HTTP方法“GET”

这里创建了一个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); 
    } 
+2

开始使该方法公开 – 2013-03-16 22:45:13

+3

@GiorgioMinardi,继续'[HttpGet] //或[AcceptVerbs(“GET”,“POST”)]'... – gdoron 2013-03-16 22:47:15

+0

@giorgio Minardi,@ gdoron哦。多谢你们。我的错。所以很抱歉用这么琐碎的东西来打扰社区。它现在可行,但我期待它能给我带来d格式的“名字:约翰”。它只是给“约翰”。这是正常的行为? – ylinkz 2013-03-16 23:15:48

回答

19

变化,从私人的方法修改为public,还加了有关接受动词的动作

private string Login(int id) 

更改为:

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

谢谢@gdoron – ylinkz 2013-03-16 23:17:06

+0

我的方法被分类为“公共”,但我仍然面临这个错误。 – Vijayaraghavan 2018-01-18 09:49:25

+0

@Vijayaraghavan发布您的代码,如果没有人帮助,您可以ping我。我相信你会在几分钟内得到答案。 – gdoron 2018-01-18 12:23:43

3

你也可以在web.config里面接受system.webserver标记中的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> 
+0

我不确定这与问题有关。 这些标题将CORS信息添加到响应中。 它们指定在执行CORS请求时可能允许客户端使用哪些HTTP方法。然而,MVC方法在服务器端进行管理。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS – 2016-05-09 09:00:35

1

除了加入[HttpGet]属性,使方法public目前公认的答案,你需要确保你使用了正确的命名空间:

  • MVC控制器使用System.Web.Mvc
  • WebAPI控制器使用System.Web.Http
相关问题