【问题标题】:String does not act as valid json object when returned from Controller从 Controller 返回时,字符串不充当有效的 json 对象
【发布时间】:2019-03-22 18:24:30
【问题描述】:

我正在尝试从 json 响应中读取字符串,但出现错误:

SyntaxError: JSON 中的意外标记 c 在位置

我有一个控制器,它从数据库返回一个 guid 作为字符串

[HttpPost("TransactionOrderId/{id}")]
public async Task<string> TransactionOrderId(int id)
{
    return await this._service.GetTransactionOrderId(id);
}

在我的 Angular 2 应用程序中,我订阅了我的提供商,它无法解析来自我的服务器的响应。

this.meetingsProvider.getTransactionOrderId(this.meetingId).subscribe((transactionId: string) => {
    this.transactionOrderId = transactionId;
});

我的 Provider 代码如下所示:

getTransactionOrderId(meetingId: number): Observable<string> {

    const headers = new Headers();
    headers.append('Content-Type', 'application/json');

    return  this.http.post(`${this.apiUrl}/${this.route}/transactionOrderId/${meetingId}`, null, {
        headers: headers
    }).map(res => <string>res.json());
}

我的服务器以正确的事务顺序 ID 响应,响应如下所示:

status: 200
statusText: "OK"
type: 2
url: "http://localhost/api/meetings/transactionOrderId/4"
_body: "0c290d50-8d72-4128-87dd-eca8b58db3fe"

我有其他 api 调用使用返回 bool 的相同代码返回正常,但是当我尝试返回字符串时,我得到一个解析错误,为什么?

【问题讨论】:

  • 是的,抱歉,如前所述,服务器返回的不是有效的 json

标签: c# angular typescript asp.net-core


【解决方案1】:

这不是一个有效的 JSON 对象,这就是您收到该错误的原因。 JSON 对象以{ 开头,以} 结尾。

如果您希望能够对其进行 JSON 反序列化,请使用:

public async Task<JsonResult> TransactionOrderId(int id)
{
    return Json(await this._service.GetTransactionOrderId(id));
}

请注意,如果您返回任何不是字符串的内容,ASP.NET Core 应该对其进行 JSON 序列化(无论如何这都是默认的序列化程序)。

【讨论】:

  • 嗯,我之前测试了一些东西。我没有意识到只有双引号才算作字符串的有效 json。我想对所有字符串任务进行一般性的处理,但这超出了这个问题的范围。感谢您的回复
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多