Bas*_*sie 6 powershell asp.net-web-api asp.net-core
我有这个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)
{
}
}
Run Code Online (Sandbox Code Playgroud)
在 PowerShell 中,我可以调用
Invoke-WebRequest http://localhost:1113/api/loans -Body $postParams -Method Get
Run Code Online (Sandbox Code Playgroud)
它工作正常(我得到value1和value2)
但是当我尝试
$postParams = "{'value':'123'}"
Invoke-WebRequest http://localhost:1113/api/loans -Body $postParams -Method Post # -ContentType 'Application/json'
Run Code Online (Sandbox Code Playgroud)
我只是不断得到
Invoke-WebRequest :远程服务器返回错误:(400) 错误请求。
我究竟做错了什么?
我尝试添加-ContentType 'Application/json'但没有任何区别
我错过了什么?
我也尝试过,Invoke-RestMethod但结果相同..
接下来我[FromBody]从value参数中删除,但value现在作为null
原因
发生这种情况是因为您的操作方法期望string来自 HTTP 请求的 Body的普通内容:
[HttpPost]
public void Post([FromBody] string value)
{
}
Run Code Online (Sandbox Code Playgroud)
这里的普通字符串是由"". 换句话说,为了表示字符串,您需要在向此操作方法发送请求时包含这些字符前后的引号。
如果您确实想将 json 字符串发送{'value':'123'}到服务器,则应使用以下有效负载:
POST http://localhost:1113/api/loans HTTP/1.1
Content-Type: application/json
"{'value':'123'}"
Run Code Online (Sandbox Code Playgroud)
注意:我们必须使用双引号字符串 !不要发送没有字符串的字符串""
怎么修
要发送纯字符串,只需使用以下PowerShell脚本:
$postParams = "{'value':'123'}"
$postParams = '"'+$postParams +'"'
Invoke-WebRequest http://localhost:1113/api/loans -Body $postParams -Method Post -ContentType 'application/json'
Run Code Online (Sandbox Code Playgroud)或者,如果您想使用 json 发送有效负载,您可以创建一个DTO来保存value属性:
public class Dto{
public string Value {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
并将您的操作方法更改为:
[HttpPost]
public void Post(Dto dto)
{
var value=dto.Value;
}
Run Code Online (Sandbox Code Playgroud)
最后,您可以调用以下PowerShell脚本来发送请求:
$postParams = '{"value":"123"}'
Invoke-WebRequest http://localhost:1113/api/loans -Body $postParams -Method Post -ContentType 'application/json'
Run Code Online (Sandbox Code Playgroud)这两种方法对我来说都完美无缺。
| 归档时间: |
|
| 查看次数: |
12041 次 |
| 最近记录: |