2014-11-10 8 views
1

CORS (Cross Origin Resource Sharing)와 관련된 것으로 보이는 ASP.Net WEB API 2.0 문제로 고심하고 있습니다. 내 웹 API에서 ASP.Net WEB API 2.0 - CORS

는 services.xyz 사이트는 난의 system.webServer 아래의 web.config에 다음 기기 구성을 한 다음를
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="http://xyz.web" /> 
    <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> 
    </customHeaders> 
</httpProtocol> 

그리고 내 ASP.Net 웹 사이트 xyz.web에서

사용되는 WEB API에서 GET 메서드를 호출 할 때 아무런 문제가 없습니다.

$http({ method: 'GET', url: 'http://services.xyz.dk/api/WarningSentences/GetWarningSentencesById?warningSentenceId=' + value }) 
.success(function (data) { 
    deferred.resolve(data); 
}) 

하지만 최대한 빨리 services.xyz에 xyz.web에서 POST를 수행하려고로, 파이어 폭스 내가 허용되지 않습니다 크로스 기원 API 호출을 할 노력하고있어 하더군요. Chrome 브라우저는 나에게 http 상태 405 (허용되지 않음)를 제공합니다.

$http({ 
    method: 'POST', 
    url: 'http://services.xyz.dk/api/WarningSentences/Update', 
    data: value, 
    dataType: 'json', 
    headers: {"Content-Type": "application/json"} 
}) 

CORS 구성을 services.xyz에서 제거하면 모든 것이 명확 해집니다. 따라서 CORS 구성을 사용하여 GET API 호출을 수행 할 수 있지만 POST API 호출은 수행 할 수없는 것 같습니다.

왜?

+0

'HTTP 405'의 응답은 메소드 (여기서는'POST')가 자원에서 사용될 수 없다는 것을 클라이언트에게 알리는 웹 서버입니다. 'POST' 요청을 허용하도록 서버 측 기능을 설정 했습니까? – jonafato

답변

0

Application_BeginRequest 이벤트를 Global.asax on WEB API 웹 사이트에 추가하여 수정했습니다.

protected void Application_BeginRequest() 
    { 
     if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS") 
     { 
      Response.Flush(); 
     } 
    } 
1

에 한번 사용 "Microsoft.AspNet.WebApi.Cors"라이브러리는 대신, 웹 API에 대한 CORS를 가능하게하는 더 깨끗한 방법이며, 당신의 Web.config에 헤더를 추가 할 필요가 없습니다 .

자세한 방법은 this 링크를 참조하십시오.

희망이 있습니다.