解析值时遇到错误意外字符:。路径 '',第 1 行,位置 1
Getting error unexpected character encountered while parsing value: . Path '', line 1, position 1
我有一个 ASP.Net Core 2.1 应用程序。我收到与下面 SO link.
中提到的相同的错误
答案部分中建议的解决方案似乎也能解决问题。
但是为一个 属性 创建一个 class 是开销很大并且对我没有吸引力。
过去,我使用 .Net Framework 4.5(+)
时也没有产生这样的开销 class
// POST api/values
[HttpPost]
public void Post([FromBody]string email)
{
}
通过 Postman,我 POST
{
"email": "myemail@email.com"
}
如何在不创建任何 class 的情况下将电子邮件值传递给 API 或
这样的?
我更愿意坚持 [FromBody]
,因为我的应用程序中的所有 API 都接受 Post
方法中的参数 FromBody
。
如果您想在不创建 class 的情况下传递电子邮件值,只需传递
"myemail@email.com"
没有 {}
括号和 email
键。当你通过
{
"email": "myemail@email.com"
}
解析器正确地建议此值表示具有 属性 email
的对象,这就是为什么需要包装器 class。
您可以简单地输入一个没有密钥的字符串,api 仍然会接受它:
"myemail@email.com"
如果您知道自己只需要一个参数,那么继续将它变成一个字符串,就像其他人一样有建议。但请记住,您将无法从 ASP.NET 中的正文中接收两个参数 核心:您将必须定义一个包含两个(或更多)属性的类型,并且请求正文中的单个对象将是映射到该类型。因此,如果您不确定,只需为您自己省去未来的重构并为您的请求定义一个类型。
不要害怕在你的项目中再创建一个 class。 这对机器来说是一个非常小的开销,对你来说是一个微不足道的烦恼花三分钟编写它,但它可以提高代码质量,使其更具表现力,甚至可以让编译器发现您可能没有注意到的错误,从而帮助您。只需 给它一个有意义的名称 ,就可以了。
您可能需要调用 JSON.stringify(email)
将电子邮件传递给 api,并将内容类型作为 header。我就是这样解决问题的:
post(id: number, email: string): Observable<any> {
const httpOptions = {
headers: new HttpHeaders({'Content-Type': 'application/json'})
};
const url = this.baseUrl + `api/Portfolio/InviteUser/${id}`;
return this.http.post<any>(url, JSON.stringify(email), httpOptions);
}
我的网站 Api 还在 URI 中包含一个 ID:
[HttpPost("[action]/{id}")]
public async Task<ActionResult<Response>> InviteUser(int id, [FromBody] string email)
我有一个 ASP.Net Core 2.1 应用程序。我收到与下面 SO link.
中提到的相同的错误答案部分中建议的解决方案似乎也能解决问题。
但是为一个 属性 创建一个 class 是开销很大并且对我没有吸引力。
过去,我使用 .Net Framework 4.5(+)
时也没有产生这样的开销 class// POST api/values
[HttpPost]
public void Post([FromBody]string email)
{
}
通过 Postman,我 POST
{
"email": "myemail@email.com"
}
如何在不创建任何 class 的情况下将电子邮件值传递给 API 或 这样的?
我更愿意坚持 [FromBody]
,因为我的应用程序中的所有 API 都接受 Post
方法中的参数 FromBody
。
如果您想在不创建 class 的情况下传递电子邮件值,只需传递
"myemail@email.com"
没有 {}
括号和 email
键。当你通过
{
"email": "myemail@email.com"
}
解析器正确地建议此值表示具有 属性 email
的对象,这就是为什么需要包装器 class。
您可以简单地输入一个没有密钥的字符串,api 仍然会接受它:
"myemail@email.com"
如果您知道自己只需要一个参数,那么继续将它变成一个字符串,就像其他人一样有建议。但请记住,您将无法从 ASP.NET 中的正文中接收两个参数 核心:您将必须定义一个包含两个(或更多)属性的类型,并且请求正文中的单个对象将是映射到该类型。因此,如果您不确定,只需为您自己省去未来的重构并为您的请求定义一个类型。
不要害怕在你的项目中再创建一个 class。 这对机器来说是一个非常小的开销,对你来说是一个微不足道的烦恼花三分钟编写它,但它可以提高代码质量,使其更具表现力,甚至可以让编译器发现您可能没有注意到的错误,从而帮助您。只需 给它一个有意义的名称 ,就可以了。
您可能需要调用 JSON.stringify(email)
将电子邮件传递给 api,并将内容类型作为 header。我就是这样解决问题的:
post(id: number, email: string): Observable<any> {
const httpOptions = {
headers: new HttpHeaders({'Content-Type': 'application/json'})
};
const url = this.baseUrl + `api/Portfolio/InviteUser/${id}`;
return this.http.post<any>(url, JSON.stringify(email), httpOptions);
}
我的网站 Api 还在 URI 中包含一个 ID:
[HttpPost("[action]/{id}")]
public async Task<ActionResult<Response>> InviteUser(int id, [FromBody] string email)