以下是WebAPI操作。在谷歌上搜索以下错误: -
请求的资源不支持http方法' POST'
我有很多链接&相应地更新了我的api,但我仍然遇到同样的错误。
ASP.NET Web Api: The requested resource does not support http method 'GET'
[AcceptVerbs("POST")]
[HttpPost]
[Route("rename/{userId}/{type}/{title}/")]
public IHttpActionResult Rename([FromBody] int userId, [FromBody] string type, [FromBody] string title)
{
//my api stuff
}
但是当通过post post调用上述内容时仍会抛出错误。
如何摆脱这个错误?
还可以在方法参数列表中使用[FromBody]
属性来解决此问题吗?
任何帮助/建议都非常感谢。 感谢。
答案 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并返回状态代码。
希望这有帮助。