我在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);
}
答案 0 :(得分:21)
将方法修饰符从私有更改为公共,还将相关的接受动词添加到操作
private string Login(int id)
更改为:
[HttpGet] // Or [AcceptVerbs("GET", "POST")]
public string Login(int id)
答案 1 :(得分: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>
答案 2 :(得分:2)
除了当前接受的添加[HttpGet]
属性以使方法公开的答案之外,您还需要确保使用正确的命名空间:
System.Web.Mvc
System.Web.Http