获取XMLHttpRequest:网络错误0x80070005,访问被拒绝

时间:2015-07-27 11:20:42

标签: angularjs asp.net-web-api cors

我有一个令牌端点,通过用户名和密码授予类型来验证用户身份。此令牌端点是从AngularJS服务调用的,该服务是我的MVC Web前端的一部分。当我调用该服务时,我收到以下错误

XMLHttpRequest: Network Error 0x80070005, Access is denied.

这似乎是一个CORS问题。到目前为止,我做了以下工作以解决这个问题

我将app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);添加到我的Startup.cs文件中,用于我的令牌网络服务。

public class Startup
{
    public void Configuration
    (
    IAppBuilder app
    )
{
    ConfigureOAuth(app);

    var config = new HttpConfiguration();
    WebApiConfig.Register(config);

    config.Filters.Add(new AuthorizeAttribute());

    app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

    app.UseWebApi(config);
}

private void ConfigureOAuth
    (
    IAppBuilder app
    )
{
   app.UseOAuthAuthorizationServer(new OAuthServerOptionsProvider().Provide());
   app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}

我还有一个覆盖OAuthAuthorizationServerProvider的类,在GrantResourceOwnerCredentials方法中我有以下代码将所有来源添加到响应标题

 public override async Task GrantResourceOwnerCredentials
     (
     OAuthGrantResourceOwnerCredentialsContext context
     )
 {
     System.Web.HttpContext.Current.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    // Other code left out to keep this short
 }

在fiddler中,我可以看到响应头已成功添加

enter image description here

这里有什么我想念的吗?

更新

这是我的请求标题

enter image description here

1 个答案:

答案 0 :(得分:0)

首先,我必须指出@maurycy所做的评论帮助我在this stackoverflow帖子的评论中找到了解决方案。

这篇文章解释了Startup.cs文件中的app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);应该移到方法的顶部,并且应该从System.Web.HttpContext.Current.Response.Headers.Add("Access-Control-Allow-Origin", "*");类中删除GrantResourceOwnerCredentials。所以我改变了我的问题中的代码,看起来像这样,

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureOAuth(app);

        var config = new HttpConfiguration();
        WebApiConfig.Register(config);

        config.Filters.Add(new AuthorizeAttribute());

        app.UseWebApi(config);
    }

    private void ConfigureOAuth(IAppBuilder app)
    {
        app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

        app.UseOAuthAuthorizationServer(new OAuthServerOptionsProvider().Provide());
        app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
    }
}

我也更改了覆盖OAuthAuthorizationServerProvider

的类
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
 {
     // Remove the response header that was added
     // Other code left out to keep this short
 }