我正在使用PowerShell V4,使用Invoke-RestMethod
命令:
Add-Type @"
using System;
public class Person{
public Guid Id {get;set;}
public string Name {get;set;}
public int Age {get;set;}
}
"@
$person = New-Object Person
$person.Age = [int]::(Get-Random -Maximum 99 -Minimum 20)
$person.Name = [string]::("Test" + (Get-Random -Minimum 10 -Maximum 100))
Invoke-RestMethod -Uri "http://localhost:51624/api/personapi" -Method Post -Body $person
在服务器端,
[HttpPost]
public IHttpActionResult Post(Person person)
{
...
return Ok();
}
服务器端收到的person
对象是默认的所有属性,例如Age
为0
而Name
为null
。如果我将$person
更改为@{Name="..."; Age=11}
,那就没关系。
我想错过什么,我想保留班级定义吗?
答案 0 :(得分:2)
您的投射方法似乎有误,您应该使用:
$person.Age = [int](Get-Random -Maximum 99 -Minimum 20)
$person.Name = [string]("Test" + (Get-Random -Minimum 10 -Maximum 100))
然后the doc声明invoke-restmethod的body参数必须实现 IDictionary (通常是哈希表)。因此,您必须将psobject转换为哈希表。 您可以使用the solution given by @Keith Hill:
$ht2 = @{}
$person.psobject.properties | Foreach { $ht2[$_.Name] = $_.Value }
答案 1 :(得分:0)
根据您发布的代码,问题出在[int]::
和[string]::
上。我想你想要施展
$person.Age = [int](Get-Random -Maximum 99 -Minimum 20)
$person.Name = [string]("Test" + (Get-Random -Minimum 10 -Maximum 100))
但您使用的是双冒号运算符(静态成员访问器)。只需删除双冒号即可解决问题。