我有一个ASP.NET Core WebAPI项目,在我的控制器中有以下GET:
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
我正试图从jQuery ajax调用中调用此方法:
$.ajax({
type: "GET",
url: url,
async: true,
dataType: "json",
success: function (data) {
setJsonResult(data);
showResultPane("API request result");
},
error: function (obj, textStatus, errorThrown) {
setHtmlResult("Error returned by API: " + errorThrown);
showResultPane("Unauthorized request result");
},
beforeSend: function (request) {
if (currentToken) {
request.setRequestHeader("Authorization", "Bearer " + currentToken);
}
}
});
我使用Fiddler监控网络流量,我看到服务器返回200 Ok响应,其中包含以下内容:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Content-Type: application/json; charset=utf-8
Server: Kestrel
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization
Date: Thu, 08 Jun 2017 09:13:18 GMT
13
["value1","value2"]
0
问题在于,虽然来自Web服务器的响应成功,但仍然会触发jQuery ajax错误方法而不是成功方法。我尝试使用dataType
参数(更改它,删除它) - 没有效果。
我甚至尝试从只返回字符串的API中返回不同的值,甚至将dataType
更改为text
- 仍然会触发错误。
这里发生了什么?
答案 0 :(得分:0)
这是因为您已将返回数据类型指定为json,并且API未返回有效的json。尝试将方法的返回类型更改为JsonResult,并从方法返回有效的jsonstring。您还可以在此站点中检查响应json是否有效:https://jsonlint.com/
答案 1 :(得分:0)
对我来说,响应看起来不像是有效的JSON。将Get() - 方法的返回值更改为string并尝试使用JavaScriptSerializer()序列化响应。在返回之前序列化()。
同时尝试将dataType设置为&#39; application / json&#39;并在ajax-call中添加 crossDomain:true 。
我只有使用自托管wcf应用程序的经验,但我使用[WebGet(ResponseFormat = WebMessageFormat.Json)属性作为我的REST方法。
答案 2 :(得分:0)
找到解决方案 - 还不了解它的全部范围。基本上它与ASP.NET CORS策略有关。所以现在我只启用了所有内容:
app.UseCors(builder => builder.AllowAnyOrigin().AllowCredentials().AllowAnyHeader().AllowAnyMethod());