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

3 回答 3

23

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

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 回答