2017-11-08 6 views
0

나는이 코드`

[WebInvoke(Method = "POST", 
    BodyStyle = WebMessageBodyStyle.Wrapped, 
    ResponseFormat = WebMessageFormat.Xml)] 
     public string GetMediaLoops() 
     { 
      string strFileName = "GetMediaLoops_response.xml"; 
      string strResult = GetFileData(strFileName); 
      return strResult; 
     }` 

각도 측면과 같은 기능 GetMediaLoops이있는 MediaServiceLoop.svc 파일이이`

mainApp.factory('MediaService', ['$http', function ($http) { 

    var factory = {}; 
    factory.getMediaLoops = function() { 

     return $http.post("http://localhost:62467/MediaLoopService.MediaLoop.svc/GetMediaLoops"); 
    } 
    return factory;}]); 
처럼 보인다

Controller code:

MediaService.getMediaLoops() 
      .then(function (response) { 
       $scope.media = response.data; 
      }, function (error) { 
       $scope.status = 'Unable to load customer data: ' + error.message; 
      }); 

`

저는 Postman과 Chrome Network (Network Image) 모두에서 응답을받을 수 있지만 요청한 리소스에 "No 'Access-Control-Allow-Origin'헤더가 있습니다. Origin 'http://localhost:2206'은 (는) 액세스 할 수 없습니다. "코드 흐름은 getMediaLoops 각도 호출에서 응답 및 오류 블록을 건너 뜁니다.

또한 위의 오류에 대해 다음 코드를 Global.asax 파일에 추가했습니다. 위의 오류를 얻을, 어떤 도움 서비스의 web.config에 다음과 같은 구성을 추가

protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost"); 
      if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
      { 
       HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE"); 

       HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
       HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
       HttpContext.Current.Response.End(); 
      } 

     } 

답변

1

시도를 감상 할 수있다 : API에서 더 PARAMS을 통과하지 않는 경우 위의 대답은 괜찮 았는데

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol>  

    <modules runAllManagedModulesForAllRequests="true"/> 
    <directoryBrowse enabled="true"/> 
</system.webServer> 
+0

감사합니다. –

0

있지만, 하지만 데이터를 전달하기 위해 WCF는 브라우저가 생성 한 프리 플라이트 요청의 일부로 OPTIONS 요청에 응답하지 못했고 "Method not allowed : 405"오류가 발생하여 영구적 인 해결책은 서비스 프로젝트에서 전역 파일을 만들고 OPTIONS 요청을 확인하고 헤더를 추가하는 것이 었습니다 그에 따라

public class Global : System.Web.HttpApplication 
{ 

    protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
     if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
     { 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); 
      HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); 
      HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000"); 
      HttpContext.Current.Response.End(); 
     } 
    } 

}