2012-07-26 33 views
17

我在我的Web API控制器以下动作:为什么我会收到来自我的帖子在网上API 404响应

// POST api/<controller> 
    [AllowAnonymous] 
    [HttpPost] 
    public bool Post(string user, string password) 
    { 
     return true; 
    } 

与任小提琴手打它时,我收到以下错误与404个状态或者测试jQuery脚本:

{“Message”:“没有找到与请求URI相匹配的HTTP资源http://localhost/amsi-v8.0.0/api/account'。”,“MessageDetail”: “在控制器的”帐户“上找不到与请求匹配的操作。”}

我的http路由如同foll行:

  RouteTable.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

工作正常。我在这里发现了另一个关于从IIS中删除WebDAV的问题。我尝试过,仍然是同样的问题。

为什么我得到404?

回答

33

ASP.NET Web API中的默认动作选择行为也关心您的动作方法参数。如果它们是简单的类型对象并且它们不是可选的,则需要提供它们以调用该特定的操作方法。在你的情况,你应该把下面针对URI的请求:如果你想获得请求体内这些值

/API /帐户用户=美孚&密码=栏

而除查询字符串(这是一个好主意),只需要创建一个用户对象,并相应地发送请求:

public class User { 
    public string Name {get;set;} 
    public string Password {get;set;} 
} 

请求:

POST HTTP://本地主机:8181/API /帐户HTTP/1.1

内容类型:应用/ JSON

主机:本地主机:8181

的Content-Length:33

{ “名称”: “富”, “密码”: “酒吧”}

而且你的操作方法应该如下东西:

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); 
} 
+0

感谢您的回答。因此,不需要传递查询字符串上的值并将它们作为POST值传递,Post动作的签名会是什么样子? – PilotBob 2012-07-27 14:12:51

+0

@PilotBob它在上面的答案。 – tugberk 2012-07-27 14:44:07

+0

我看到模型和请求,但没有看到控制器中的发布操作。它只是公共无效后(用户用户)? – PilotBob 2012-07-27 15:30:41

2

当我们发布一个JSON期望它一类,以便创建模型文件夹类这样

public class Credential 
{ 
    public string username { get; set; } 
    public string password { get;set; } 
} 

现在改变参数

[HttpPost] 
public bool Post(Credential credential) 
{ 
    return true; 
} 

现在就来试试一切都会顺利

相关问题