无法使用PUT或POST调用方法

时间:2016-10-08 23:36:23

标签: web-services http asp.net-web-api put

我可以使用GET通过http://requestmaker.com/请求API方法,但是当我使用POST或PUT时它返回...

HTTP/1.1 403 Forbidden

这是方法......

[HttpPost]
[Route("api/sales")]
public object Put([FromBody] Sale sale)
{
   sale.DateTime = DateTime.Now;

   paymentRepository.Insert(sale);
   paymentRepository.Save();

   return Ok(new { id = sale.SaleId });
}

有什么想法吗?

请求标题是......

  

POST / admin / api / sales HTTP / 1.1主持人:hello.com接受: /   内容类型:text / html内容长度:17

请求数据......

TourId=3&UserId=1

3 个答案:

答案 0 :(得分:1)

它与您的Controller如何路由请求有关。你好像已经定义了这样的东西

默认为GET:

public async Task<IHttpActionResult> MethodName(){ 
  return this.Ok()
}

[HttpGet]
public async Task<IHttpActionResult> MethodName(){ 
  return this.Ok()
}

您可以在函数上方定义一些属性:

对于POST:

[HttpPost]
public async Task<IHttpActionResult> MethodNamePost(){ 
  return this.Ok()
}

对于PUT:

[HttpPut]
public async Task<IHttpActionResult> MethodNamePut(){ 
  return this.Ok()
}

像Win一样说:

[HttpPut]
[Route("api/sales")]
public object Put([FromBody] Sale sale)
{
    sale.DateTime = DateTime.Now;
    paymentRepository.Insert(sale);
    paymentRepository.Save();

    return new { id = sale.SaleId };
}

我会将回报更改为this.Ok(new {id = sale.SaleId});

答案 1 :(得分:1)

您的请求标头错误,应该是

{
"UserId":"1",
"TourID":"3",
}

原因:应用/ JSON

答案 2 :(得分:1)

噢,傻傻的,它正在寻找一个防伪标记。我以为我已经对过滤器进行了评论,但是我已经为MVC而不是Web Api做过了。糟糕。

我还需要将内容类型设置为.args并将数据设置为application/json,以便模型绑定起作用。