我放弃了试图解决这个问题。
我的IIS web.config中有相关的“Access-Control-Allow-Methods
”,我尝试在我的Angular代码中添加配置设置,但在尝试让Chrome调用跨域JSON Web服务烧几个小时后,我给了可悲地。
最后,我添加了一个愚蠢的ASP.Net处理程序网页,得到,调用我的JSON Web服务,并返回结果。它在2分钟内启动并运行。
这是我使用的代码:
public class LoadJSONData : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string URL = "......";
using (var client = new HttpClient())
{
// New code:
client.BaseAddress = new Uri(URL);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.Add("Authorization", "Basic AUTHORIZATION_STRING");
HttpResponseMessage response = client.GetAsync(URL).Result;
if (response.IsSuccessStatusCode)
{
var content = response.Content.ReadAsStringAsync().Result;
context.Response.Write("Success: " + content);
}
else
{
context.Response.Write(response.StatusCode + " : Message - " + response.ReasonPhrase);
}
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
在我的角度控制器...
$http.get("/Handlers/LoadJSONData.ashx")
.success(function (data) {
....
});
我敢肯定有这样做的一个简单/更通用的方法,但生活太短...
这对我很有用,我现在可以继续做正常的工作!
是的,这是我认为正在发生的事情。原来,我需要在资产主机上设置访问标题才能使其正常工作。 – matsko
@matsko你能详细说明你做了什么来解决这个问题吗?我面临着同样的问题,即AngularJS'$ resource' _POST_请求正在为我的后端ExpressJS服务器(在同一主机上,但是不同的端口上)生成一个_OPTIONS_请求。 – dbau
我使用它的方式是在源服务器和远程请求所针对的任何服务器上都设置CORS头。在这种情况下,您需要为提供JavaScript代码的服务器进行设置,然后对提供$资源数据的服务器执行相同的操作。 – matsko