2016-08-26 2 views
1

Microsoft.AspNet.WebApi V5.2.3, Microsoft.Owin.Host.HttpListener 3.0.1을 사용하고 있습니다. 다음과 같은 구성으로 시작 :WebAPI OWIN SelfHosting CORS 지원

public void Configuration(IAppBuilder appBuilder) 
{ 
    HttpConfiguration config = new HttpConfiguration(); 
    config.MapHttpAttributeRoutes(); 

    appBuilder.UseWebApi(config); 
} 

그리고 API 컨트롤러 클래스를 사용하여 선언된다

내가 불러들이려고하는데 만약 내가 같은 컴퓨터에 HttpClent를 사용하여 위의 API를 호출 할 수,하지만
[EnableCors("*", "*", "*")] 
public class CWebAPIController : ApiController 
{ 
    [Route("API/System/Login"), HttpGet] 
    public IHttpActionResult Login(string UserID, string Password) 
    { 
     .... bla bla bla ..... 
    } 
} 

다른 컴퓨터의 API (동일한 서브넷 내)에서 400 개의 BadRequest 응답을 받았습니다.

나는 이것이 CORS 문제라고 생각하지만 어떻게 해결할 수 있는지 알 수 있습니다. Google에서 검색하면 많은 결과가 나오며 하루 종일 시도한 후에 올바른지를 모르는 WebApi의 많은 버전/구현이 있습니다. 사전에

덕분에

답변

0

이처럼 Startup 클래스에서 CORS를 Microsoft.Owin.Cors 패키지로 가져, 어쩌면 Microsoft.AspNet.Cors 패키지를 프로젝트에 초기화해야합니다

var corsPolicy = new CorsPolicy 
      { 
       AllowAnyHeader = true, 
       AllowAnyMethod = true, 
       AllowAnyOrigin = true, 
       SupportsCredentials = true 
      }; 
      corsPolicy.ExposedHeaders.Add("x-markit-currentpage"); 
      corsPolicy.ExposedHeaders.Add("x-markit-totalpages"); 
      corsPolicy.ExposedHeaders.Add("x-markit-totalresults"); 
      app.UseCors(new CorsOptions 
      { 
       PolicyProvider = new CorsPolicyProvider { PolicyResolver = context => Task.FromResult(corsPolicy) } 
      }); 
0

EnableCors 속성은 API 컨트롤러에서 작동해야합니다. 또는 다음 중 하나를 수행 할 수 있습니다.

당신은 당신이 다음

var cors = new EnableCorsAttribute("www.example.com", "*", "*"); 
config.EnableCors(cors); 

당신은 정액을 사용하여 도메인/컴퓨터 수 있도록하는 제어를하려는 경우 모든 컴퓨터에서 액세스 다음 다른

appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); 

을 사용할 수 있도록하려면 Microsoft.Owin.Cors 패키지를 설치해야합니다.

0

자체 호스팅의 경우 관리 모드에서 아래 명령을 실행해야합니다.

netsh http add urlacl url=http://+:<port>/ user=<user id> 
1

나는 이런 식으로 고르를 추가했습니다 :

public void Configuration(IAppBuilder app) 
    { 
     var config = ConfigureApi(); 
     app.UseWebApi(config); 
    } 
    private HttpConfiguration ConfigureApi() 
    { 

     var config = new HttpConfiguration(); 
     config.Routes.MapHttpRoute(
      "DefaultApi", 
      "{controller}/{action}/{id}", 
      new { id = RouteParameter.Optional }); 
     config.MessageHandlers.Add(new CorsMessageHandler()); 
     return config; 
    } 

CorsMessageHandler 여기에 존재 : https://github.com/Microsoft/FetchClimate/blob/master/src/Service/Frontend/CORS/CorsMessageHandler.cs

는 작동 바랍니다.

관련 문제