我的Web api控制器中有以下操作:
// POST api/<controller>
[AllowAnonymous]
[HttpPost]
public bool Post(string user, string password)
{
return true;
}
当使用fiddler或测试jQuery脚本命中它时,我收到404状态的以下错误:
{“消息”:“找不到与请求URI'http://localhost/amsi-v8.0.0/api/account'匹配的HTTP资源。”,“MessageDetail”:“在控制器'帐户'上找不到与请求匹配的操作。” }
我的http路线如下:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
工作正常。我在这里找到另一个问题,讨论从IIS中删除WebDAV。我试过了,还是同样的问题。
为什么我会得到404?
答案 0 :(得分:36)
ASP.NET Web API中的默认操作选择行为也与您的操作方法参数有关。如果它们是简单类型对象并且它们不是可选的,则需要提供它们才能调用该特定操作方法。在您的情况下,您应该针对URI发送请求,如下所示:
/ API /帐户用户=美孚&安培;密码=酒吧
如果你想在请求体内而不是查询字符串中获取这些值(这是一个更好的主意),只需创建一个User对象并相应地发送请求:
public class User {
public string Name {get;set;}
public string Password {get;set;}
}
请求:
POST http:// localhost:8181 / api / account HTTP / 1.1
Content-Type:application / json
主持人:localhost:8181
内容长度:33
{“姓名”:“foo”,“密码”:“bar”}
你的行动方法应如下所示:
public HttpResponseMessage Post(User user) {
//do what u need to do here
//return back the proper response.
//e.g: If you have created something, return back 201
return new HttpResponseMessage(HttpStatusCode.Created);
}
答案 1 :(得分:2)
当我们发布一个json时,它期望一个类,所以在模型文件夹中创建类,如此
public class Credential
{
public string username { get; set; }
public string password { get;set; }
}
现在更改参数
[HttpPost]
public bool Post(Credential credential)
{
return true;
}
现在尝试一切顺利