为什么我在网络API中收到了来自POST的404响应

时间:2012-07-26 22:31:33

标签: asp.net-web-api

我的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?

2 个答案:

答案 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; 
}

现在尝试一切顺利