我有2个Web API项目:
现状
Api1-UI可以从自己API的ValuesController查询数据
Api2返回正确数据(在Firefox和Fiddler中测试)
守则
JavaScript客户端:
var _load = function (url) {
$.ajax({
url: url,
method: 'GET',
accepts: "application/json; charset=utf-8",
success: function (data) {
alert("Success: " + data);
},
error: function (data) {
alert("Error :" + data);
}
});
};
WebApi控制器方法:
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
问题
实验性前端的JavaScript UI无法显示甚至接收来自API 2的数据,根据Fiddler的说法,这些数据发送正确。
我的第一个想法是,我使用了错误的方法,但我尝试了$.getJSON
和$.ajax.
但我总是以错误结束。它只是说 statusText =“Error”
我不明白,为什么它可以显示来自自己的ApiController的数据,而不是来自“外部”......
感谢您提供任何帮助/建议
答案 0 :(得分:2)
您似乎使用ajax从不同的域Y访问X中的数据。这似乎是一个典型的跨域访问问题。
您需要将 Access-Control-Allow-Origin 设置为值&#34; *&#34;在你的回复标题中。
Response.Headers.Add("Access-Control-Allow-Origin", "*")
有各种方法可以解决这个问题
<强> FilterAttribute 强>
public class AllowCrossSiteJsonAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Response != null)
actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
base.OnActionExecuted(actionExecutedContext);
}
}
在控制器操作上使用属性
[AllowCrossSiteJson]
public Result Get(int id)
{
//return appropriate result
}