【问题标题】:Can't call method with PUT or POST无法使用 PUT 或 POST 调用方法
【发布时间】:2017-02-17 16:57:15
【问题描述】:

我可以使用 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

【问题讨论】:

  • 不能有多个 FromBody 参数属性
  • 这就是我想要的。它使用 FromUri 与 GET 一起使用。我想我必须创建一个模型来从 body 绑定。
  • 不,我不是。这不会阻止 GET 的工作吗?
  • FromUri 从 uri 中构建复杂模型,FromBody 从 body 中的复杂模型中提取简单类型 asp.net/web-api/overview/formats-and-model-binding/…
  • 尝试发送请求数据{ "TourId":"3", "UserId":"1" } 和内容类型application/json 并制作类型为Sale 的[RequestBody]

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


【解决方案1】:

这与您的控制器如何路由请求有关。你似乎已经定义了这样的东西

默认获取:

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()
}

就像温说的:

[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});

【讨论】:

  • 感谢您的提示。 :)
【解决方案2】:

您的请求标头错误应该是这样的

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

原因:应用程序/json

【讨论】:

    【解决方案3】:

    哦,我真傻,它在寻找防伪令牌。我以为我已经将过滤器注释掉了,但我是为 MVC 而不是 Web Api 完成的。哎呀。

    我还需要将内容类型设置为application/json,并将数据设置为{ "TourId":"3", "UserId":"1" },以便模型绑定起作用。

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2014-12-23
      • 2021-02-16
      • 1970-01-01
      相关资源
      最近更新 更多