2017-02-15 1593 views
2

以下是WebAPI操作。在谷歌搜索关于下面的错误: -如何解决 - 请求的资源不支持http方法'POST'

The requested resource does not support http method 'POST'

我得到了相应的更新我的API链接&数量,但仍然我得到同样的错误。

但仍然可以通过邮递员调用以上时抛出的错误。

Error

如何摆脱这种错误的?

也可以解决这个问题,而不使用方法参数列表中的[FromBody]属性?

任何帮助/建议高度赞赏。 谢谢。

+0

显然,还有另一个叫做“重命名”的动作。和[路由(“重命名/ {userId}/{type}/{title} /”)]与您的请求url不匹配。 – levent

+0

@levent,已勾选。没有什么这样的 –

回答

1

你已经宣布的路线,需要的URL参数

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

所以,当你发送请求api/customer/rename它不符合这个方法。你应该从路由参数删除您所传递请求体参数

[Route("rename")] 

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


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

Web API reads the request body at most once, so only one parameter of an action can come from the request body. If you need to get multiple values from the request body, define a complex type.

你应该创建复杂的类型,将持有的所有参数

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) 

,并发送请求数据作为应用/ X- www-form-urlencoded

+0

我试过你的输入了。同样的错误! –

+0

多个'[FromBody]'很好,或者它可能是一个原因? –

+0

@ Kgn-web抱歉,不在了。是的,这也是一个问题。更新了答案。请确保路由前缀是'api/customer' –

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

最后一个答案是正确的,你要求路线中的这些参数,但是说你期望他们在帖子正文中。另外,通常路线将以名词而不是动词开始。你在重命名的是什么? (即[路线( “用户/重命名/ {用户id}/{类型}/{标题}”)]根据您的初始后

,试试这个:

[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和返回状态代码。

希望这会有所帮助。

+0

Name属性的用法是什么? –

+0

多[FromBody]很好,或者它可能是一个原因? –

+0

路由命名用于生成链接,例如,如果您想使用Created(Uri location,T Content)响应类型,则可以使用手动滚动路由帮助程序或类似Ploeh.Hyprlinkr的方式来动态获取Uris路线名称。因此,如果您更改路线,该链接仍然是正确的。 – jeffj23

相关问题