使用Angular

时间:2019-06-30 12:10:10

标签: asp.net angular typescript

目标:在Angular中检索单个值“ test”。

问题:我收到一条错误消息

  

错误:SyntaxError:JSON中意外的令牌e,位于JSON.parse()的位置1

我缺少什么语法?


ASP.NET

// https://localhost:44353/api/Jobadvertisement/VVValidate/4
[HttpGet("VVValidate/{id:int}")]
public ActionResult<String> VVValidate(int id)
{
    return "test";
}

角度

const url = environment.url

let asdfasdf2 = url + 'api/Jobadvertisement/VVValidate/' + "4";

var dsfsdssf = this.http.get(asdfasdf2).subscribe(data => {

  console.log(data);

});

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:1)

您需要将ActionResult更改为string

[HttpGet("VVValidate/{id:int}")]
public string VVValidate(int id)
{
    return "test";
}

答案 1 :(得分:1)

您可以尝试在Angular中使用httpOptions之类的方法吗?

const url = environment.url;
let asdfasdf2 = url + 'api/Jobadvertisement/VVValidate/' + "4"; 
var dsfsdssf = this.http.get(asdfasdf2, { responseType: 'text' }).subscribe(data => { console.log(data); });

答案 2 :(得分:1)

Angular的HttpClient希望默认使用JSON数据,这就是为什么从API返回纯文本时会收到JSON反序列化错误的原因。

您需要将responseType: 'text'作为选项传递给get方法,以防止HttpClient将数据视为JSON:

httpClient.get("url", { responseType: 'text' });

您可以在Angular's Documentation中找到有关此信息的更多信息。

即使您的API代码按原样工作,我也要指出两点:

  1. 您可以解开String并删除ActionResult,因为不需要。
  2. 我鼓励您使用string类型而不是System.String。有关详细说明,请参阅this

应用以下更改后,您的代码将如下所示:

[HttpGet("VVValidate/{id:int}")]
public string VVValidate(int id)
{
    return "test";
}