如何修复 - 请求的资源不支持http方法' POST'

时间:2017-02-15 14:16:34

标签: c# asp.net-web-api postman

以下是WebAPI操作。在谷歌上搜索以下错误: -

  

请求的资源不支持http方法' POST'

我有很多链接&相应地更新了我的api,但我仍然遇到同样的错误。

但是当通过post post调用上述内容时仍会抛出错误。

Error

如何摆脱这个错误?

还可以在方法参数列表中使用[FromBody]属性来解决此问题吗?

任何帮助/建议都非常感谢。 感谢。

2 个答案:

答案 0 :(得分:3)

您已声明需要网址参数的路线

[Route("rename/{userId}/{type}/{title}/")]

因此,当您向api/customer/rename发送请求时,它与此方法不匹配。您应该从路径参数中删除您在请求正文中传递的参数

[Route("rename")]

确保您的控制器上有适当的RoutePrefix("api/customer")属性。

第二个问题是多个[FromBody]参数。您将获得无法绑定多个参数错误。有限制 - 您只能将一个参数标记为FromBody。请参阅Sending Simple Types备注:

  

Web API最多读取一次请求体,因此只有一个参数   行动可以来自请求机构。如果你需要多个   来自请求体的值,定义一个复杂的类型。

你应该创建一个包含所有参数的复杂类型

public class RenameModel
{
   public int UserId { get; set; }
   public string Type { get; set; }
   public string Title { get; set; }
}

将方法签名更改为

[HttpPost]
[Route("rename")]
public IHttpActionResult Rename(RenameModel model)

将请求数据发送为 application / x-www-form-urlencoded

答案 1 :(得分:1)

 [Route("rename/{userId}/{type}/{title}/")]
 public IHttpActionResult Rename([FromBody] int userId,  [FromBody] string  type, [FromBody] string title)

最后一个答案是正确的,你在路线中要求这些参数,但是说你希望它们在帖子体内。此外,通常路线将以名词而不是动词开头。你要重命名的是什么? (即[路线(“用户/重命名/ {userId} / {type} / {title}”)]

根据您的初始帖子,请尝试以下方式:

 [HttpPost]
 [Route("rename/{userId}/{type}/{title}" Name = "RenameUser"]
 public IHttpActionResult Rename(int userId, string type, string title)
 {
     _myServiceMethod.Rename(userId, type, title);
     return new StatusCodeResult(HttpStatusCode.Created, this);   
 }

或者,如果您想在正文中发布信息:      声明您的数据合同:

public class User
{
    public string Type { get; set; }
    public string Title { get; set; }
}

然后在端点上:

[HttpPost]
[Route("rename/{userId}", Name = "RenameUserPost")]
public IHttpActionResult RenameUserPost(int userId, [FromBody] User userData)
{
    return new StatusCodeResult(HttpStatusCode.Created, this);
}

请注意,在两个返回中,“this”指的是继承自ApiController的控制器类。在swagger中验证了这两个,并且他们接受POST并返回状态代码。

希望这有帮助。