2015-01-30 5 views
1

У меня возникли проблемы с получением CORS для работы с WebAPI. Я реализации ICorsPolicyProvider так:WebAPI CORS POST запросы не отображаемые заголовки

public class CustomCorsPolicy : Attribute, ICorsPolicyProvider 
{ 
    private CorsPolicy _policy; 

    public CustomCorsPolicy() 
    { 
     _policy = new CorsPolicy 
     { 
      AllowAnyMethod = true, 
      AllowAnyHeader = true 
     }; 

     _policy.Origins.Add("http://****"); 
     _policy.Origins.Add("http://localhost:8080"); 
    } 
    public Task<CorsPolicy> GetCorsPolicyAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     return Task.FromResult(_policy); 
    } 
} 

Это прекрасно работает для GET, PUT и DELETE методы, но для методов POST Предполетный запрос не делает заголовок Access-Control-allow- в ответ.

Это то, что предполетный ответ выглядит для PUT (который работает):

Access-Control-Allow-Headers:content-type 
Access-Control-Allow-Methods:PUT 
Access-Control-Allow-Origin:http://localhost:8080 
Cache-Control:no-cache 
Content-Length:0 
Date:Fri, 30 Jan 2015 21:37:42 GMT 
Expires:-1 
Pragma:no-cache 
Server:Microsoft-IIS/8.0 
X-AspNet-Version:4.0.30319 
X-Powered-By:ASP.NET 
X-SourceFiles:=?UTF-8?B?QzpccmVwb1xmb3NfYWxsXHNyY1xFbGxpb3R0LkZyb250T2ZmaWNlLkRhdGFNYW5hZ2VtZW50XGFwaVxmaXhpbmdDb25maWd1cmF0aW9uc1wwRUg1Q185OC43NTAsOVw=?= 

Это то, что предполетный ответ выглядит для POST (который не работает):

Allow:OPTIONS, TRACE, GET, HEAD, POST 
Content-Length:0 
Date:Fri, 30 Jan 2015 21:56:22 GMT 
Public:OPTIONS, TRACE, GET, HEAD, POST 
Server:Microsoft-IIS/8.0 
X-Powered-By:ASP.NET 
X-SourceFiles:=?UTF-8?B?QzpccmVwb1xmb3NfYWxsXHNyY1xFbGxpb3R0LkZyb250T2ZmaWNlLkRhdGFNYW5hZ2VtZW50XGFwaVxmaXhpbmdzXA==?= 

ответ

0

Я решил это с помощью этого решения:

https://stackoverflow.com/a/14631068/85733

Я использовал CORS nuget, и я не думаю, что он работает правильно. Не тратьте время на это. Это отлично подходит для полетов:

protected void Application_BeginRequest(object sender, EventArgs e) 
    { 
     HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 

     if (HttpContext.Current.Request.HttpMethod == "OPTIONS") 
     { 
      //These headers are handling the "pre-flight" OPTIONS call sent by the browser 
      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(); 
     } 

    } 
Смежные вопросы