2014-12-03 3 views
1

저는 각도를 사용하여 웹 API 응용 프로그램에 http POSTS 요청을하는 MVC 4 응용 프로그램이 있습니다. 개발 환경에서 예상대로 모든 것이 작동하지만, 우리의 생산 환경에 배포 할 때 브라우저 이것은 CORS 문제처럼 보인다XMLHttpRequest : 네트워크 오류 액세스가 거부되었습니다.

XMLHttpRequest: Network Error 0x80070005, Access is denied. 

의 콘솔 로그에 다음과 같은 오류를 받고 있어요, 나는 다음과 같은 코드를 추가 내 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> 

에서 다음 코드를 제거하고 내에서 Global.asax에서 구현 내 웹 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); 
    } 
} 

에 대한 사용자 지정 CORS 정책 속성 클래스를 썼다 파일

GlobalConfiguration.Configuration.EnableCors(new CrestCorsPolicyAttribute()); 
관련 문제