powershell - (400) 尝试向 API 发布简单值时出现错误请求
问题描述
我有这个LoansController
用于 web api
[Route("api/[controller]")]
[ApiController]
public class LoansController : ControllerBase
{
// GET api/values
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}
// POST api/loans
[HttpPost]
public void Post([FromBody] string value)
{
}
}
在 PowerShell 中我可以调用
Invoke-WebRequest http://localhost:1113/api/loans -Body $postParams -Method Get
它工作正常(我得到value1
和value2
)
但是当我尝试
$postParams = "{'value':'123'}"
Invoke-WebRequest http://localhost:1113/api/loans -Body $postParams -Method Post # -ContentType 'Application/json'
我只是不断得到
Invoke-WebRequest :远程服务器返回错误:(400)错误请求。
我究竟做错了什么?
我尝试添加-ContentType 'Application/json'
,但没有任何区别
我错过了什么?
我也试过Invoke-RestMethod
但结果相同..
接下来我[FromBody]
从value
参数中删除但value
现在作为null
解决方案
原因
之所以会发生这种情况,是因为您的操作方法期望string
来自 HTTP 请求的正文:
[HttpPost]
public void Post([FromBody] string value)
{
}
这里的纯字符串是由引用""
的字符序列。换句话说,要表示字符串,您需要在向此操作方法发送请求时在这些字符的前后加上引号。
如果您确实想将 json 字符串发送{'value':'123'}
到服务器,则应使用以下有效负载:
POST http://localhost:1113/api/loans HTTP/1.1
Content-Type: application/json
"{'value':'123'}"
注意:我们必须使用双引号字符串 !不要发送没有""
怎么修
要发送纯字符串,只需使用以下
PowerShell
脚本:$postParams = "{'value':'123'}" $postParams = '"'+$postParams +'"' Invoke-WebRequest http://localhost:1113/api/loans -Body $postParams -Method Post -ContentType 'application/json'
或者,如果您想使用 json 发送有效负载,您可以创建一个
DTO
来保存该value
属性:public class Dto{ public string Value {get;set;} }
并将您的操作方法更改为:
[HttpPost] public void Post(Dto dto) { var value=dto.Value; }
最后,您可以调用以下
PowerShell
脚本来发送请求:$postParams = '{"value":"123"}' Invoke-WebRequest http://localhost:1113/api/loans -Body $postParams -Method Post -ContentType 'application/json'
这两种方法对我来说都完美无缺。
推荐阅读
- c++ - C++ 中特定对象的多线程
- python - TensorFlow Object Detection API Mask-RCNN 训练导致OOM错误
- webrtc - WebRtc 流而不损失质量
- java - java ee 使用 Morphia 时如何防止没有 sql 注入?
- python - 如何使用 python ISBNLIB 元方法捕获错误并继续
- python - 将 BDP 公式转换为 tia
- html - cakephp 3.6 中的 'type'=> 'datetime-local'
- arrays - 我的 for 循环找不到我的数组,尽管我指定了它
- javascript - 没有管道 Angular 6 的过滤器:最重要的问题
- ruby-on-rails - 资产在服务器中预编译但不显示在 puma 和 nginx 服务器中