控制器代码:
[Route("api/[controller]")]
[ApiController]
public class AjaxController : ControllerBase
{
ApplicationDbContext dbContext = null;
public AjaxController(ApplicationDbContext ctx)
{
dbContext = ctx;
}
[HttpGet]
[Route("GetString")]
public string GetString()
{
return "Hello World";
}
[HttpGet]
[Route("GetCategories")]
public Category[] GetCategories()
{
return dbContext.Categories.ToArray();
}
}
角码:
http.get<string>(baseUrl + 'api/ajax/GetString').subscribe(result => {
console.log(result);
}, error => console.error(error));
虽然角可以在没有错误的情况下解析GetCategories端点,但它不能解析简单得多的GetString。为什么?控制台中的错误是:
错误: SyntaxError:"JSON.parse: JSON数据第1列中的意外字符“文本:"Hello”
我试过了,邮递员的反应很好,见截图:
发布于 2020-04-04 12:39:14
问题是您来自GetString
的响应只是返回一串值Hello World
,如Postman截图所示。如果要获得有效的响应,则GetCategories
端点必须返回有效的JSON。
默认情况下,角假定HttpRequest
的响应类型为json
类型。
要解决这个问题,请指定为http.get()
的第二个参数,即从服务器预期的responseType
(在您的情况下,GetString
端点将是'text'
)。因此,您的http.get()
调用应该如下所示:
http.get<string>(baseUrl + 'api/ajax/GetString', { responseType: 'text' }).subscribe(result => {
console.log(result);
}, error => console.error(error));
如果您的目的是从GetString
返回有效的JSON,那么您需要适当地格式化来自服务器的响应。
请参阅关于HttpRequest - responseType的角度文档。我已经在下面附上了一份。
responseType: 'arraybuffer' | 'blob' | 'json' | 'text'
服务器的预期响应类型。 这用于在将响应返回给请求者之前对响应进行适当的解析。
https://stackoverflow.com/questions/61027540
复制相似问题