2017-01-12 2 views
1

Rest API를 처음 사용합니다. 내 응용 프로그램에서 크로스 도메인 나머지 API를 호출하려고합니다.나머지 API - 405 메소드가 허용되지 않습니다.

$.ajax({ 
      type: "GET", 
      async: false, 
      url: 'http://xx.xxx.xxx.xx:9003/GetProjectList', 
      contentType: "application/json", 
      dataType: "json", 
      traditional: true, 
      CrossDomain: true, 
      data: { 
       StartDate: '2016-12-20', 
       EndDate: '2017-01-10' 
      }, 
      success: function (data) { 
       alert("Success"); 
       alert(data); 

      }, 

      error: function (xhr, textStatus, errorThrown) { 
       alert("Failed"); 
       alert(xhr); 
       alert(textStatus); 
       alert(errorThrown); 

      } 
     }); 

하지만 난 여기 아무것도 실종

OPTIONS http://xx.xxx.xxx.xx:9003/GetProjectList?StartDate=2016-12-20&EndDate=2017-01-10 405 (Method Not Allowed) 

XMLHttpRequest cannot load http://xx.xxx.xxx.xx:9003/GetProjectList?StartDate=2016-12-20&EndDate=2017-01-10. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:64207' is therefore not allowed access. The response had HTTP status code 405. 

으로 오류를 얻고있다 - 여기 내 코드? 모든 코드 또는 구성?

브라우저 나 우편 배달부에서 해당 URL을 직접 누르는 것이 좋습니다. 하지만 응용 프로그램에서 작동하지 않습니다.

+0

이 기본 CORS 오류입니다. 응답 헤더에 필수 CORS 헤더를 설정해야합니다. 거기에 사용할 수있는 톤의 대답이 있습니다. 그런데 서비스 웹 API 또는 wcf-rest가 있습니까? 두 태그를 함께 추가하면 안됩니다. – Developer

+0

CORS 만 허용하면됩니다. 그것을 알면, 그것은 항상 작동하지 않습니다! –

+0

GET 요청에서 Content-Type을 설정하는 이유는 무엇입니까? – Quentin

답변

2

문제는 CORS (Cross-Origin Requests)에 관한 것입니다. 문제를 해결하려면 CORS를 활성화해야합니다. Nuget 패키지

Install-Package Microsoft.AspNet.WebApi.Cors 

다운로드 당신은 당신이 살펴 보셔야합니다 WebApiConfig.cs에

var corsAttr = new EnableCorsAttribute("*", "*", "*"); 
config.EnableCors(corsAttr); 

추가 정보를 몇 가지 코드를 추가해야합니다 : https://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

0

나는 문제가 CORS 문제 (때로는 405 또한 잘못된 HTTP 동사와 API를 호출하고 의미)라고 생각합니다 ..하지만이 CORS 문제처럼 보이는 당신의 예외를 읽고 ..이 시도 :

using Goocity.API; 
using Microsoft.Owin; 
using Microsoft.Owin.Cors; 
using Owin; 

[assembly: OwinStartup("API", typeof(Goocity.API.Startup))] 

    namespace Goocity.API 
    { 
     public partial class Startup 
     { 
      public void Configuration(IAppBuilder app) 
      { 
       #region TO UNCOMMENT WHEN IS IN PRODUCTION 
       //var corsPolicy = new CorsPolicy 
       //{ 
       // AllowAnyMethod = true, 
       // AllowAnyHeader = true, 
       // SupportsCredentials = true, 
       // Origins = { "http://www.yoursite.it" } 
       //}; 

       //app.UseCors(new CorsOptions 
       //{ 
       // PolicyProvider = new CorsPolicyProvider 
       // { 
       //  PolicyResolver = context => Task.FromResult(corsPolicy) 
       // } 
       //}); 
       #endregion TO UNCOMMENT WHEN IS IN PRODUCTION 

       app.UseCors(CorsOptions.AllowAll); 
       ConfigureAuth(app); 

      } 
     } 
    } 

이 파일을 시작 파일에 넣고 Microsoft.Owin.Cors Nuget 패키지를 설치하십시오.

관련 문제