2014-12-03 148 views
1

我有一个MVC 4应用程序使用角度向Web API应用程序发送http POSTS请求。一切正常的发展环境符合市场预期,但在部署到我们的生产环境我得到下面的错误在浏览器中XMLHttpRequest:网络错误访问被拒绝

XMLHttpRequest: Network Error 0x80070005, Access is denied. 

这看起来像一个CORS问题的控制台日志,我添加以下代码我的web.config

<system.webServer> 
<handlers> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <remove name="OPTIONSVerbHandler" /> 
    <remove name="TRACEVerbHandler" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 
<httpProtocol> 
    <customHeaders> 
    <clear /> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" /> 
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" /> 
    </customHeaders> 
</httpProtocol> 

跟着Enabling Cross-Origin Requests in ASP.NET Web API 2无济于事。还有什么我失踪?

回答

1

好吧,我从我的web.config

<httpProtocol> 
    <customHeaders> 
    <clear /> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Methods" value="GET, PUT, POST, DELETE, HEAD, OPTIONS" /> 
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" /> 
    </customHeaders> 
</httpProtocol> 

删除下面的代码,并写了一个定制CORS策略属性类为我的网页API

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)] 
public class CrestCorsPolicyAttribute : Attribute, ICorsPolicyProvider 
{ 
    private readonly CorsPolicy _policy; 

    public CrestCorsPolicyAttribute() 
    { 
     _policy = new CorsPolicy 
     { 
      AllowAnyMethod = true, 
      AllowAnyHeader = true 
     }; 

     var allowedOrigins = ConfigurationManager.AppSettings["AllowedOrigins"].Split(','); 
     foreach (var allowedOrigin in allowedOrigins) 
     { 
      _policy.Origins.Add(allowedOrigin); 
     } 
    } 

    public Task<CorsPolicy> GetCorsPolicyAsync 
     (
     HttpRequestMessage request, 
     CancellationToken cancellationToken 
     ) 
    { 
     return Task.FromResult(_policy); 
    } 
} 

这是我从我的Global.asax实施文件

GlobalConfiguration.Configuration.EnableCors(new CrestCorsPolicyAttribute()); 
相关问题