2017-01-01 6 views
2

У меня есть служба ASP.NET Web API 2. И несколько клиентских (угловых) приложений разговаривают с этой службой. приложения и службы публикуются на разных поддоменов, как следующее:Ошибка CORS на кнопке браузера

service.mydomain.com

app1.mydomain.com

app2.mydomain.com

Я использовал Microsoft.AspNet.WebApi.Cors - пакет NuGet для включения CORS, она работает нормально, за исключением одного сценария: Когда пользователь открывает одно приложение (app1.mydomain.com). Затем переходит к другому (app2.mydomain.com). Затем нажмите кнопку назад. follwoing CORS Ошибка:

The 'Access-Control-Allow-Origin' header has a value 'http://app2.mydomain.com' that is not equal to the supplied origin. 
Origin 'http://app1.mydomain.com' is therefore not allowed access 

я настроил Microsoft.AspNet.WebApi.Cors - NuGet пакет следующим образом:

public static void Register(HttpConfiguration config) 
     { 
     var cors = new EnableCorsAttribute(
       //to-do allow cross domains for all maarif.com sites 
       origins: "*", //and also tried "http://app1.mydomain.com, http://app2.mydomain.com" gives same result 
       headers: "*", 
       methods: "*") {SupportsCredentials = true}; 

      config.EnableCors(cors); 
     } 

Я проследил значения заголовка Origin на сервере. Я поставил следующий код в службы «global.asax»:

protected void Application_BeginRequest() 
     { 
      var origin = HttpContext.Current.Request.Headers["Origin"]; 

      if (origin != null) 
      { 
       HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", origin); 
       HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "*"); 
       HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "*"); 
       HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true"); 
      } 
     } 

Проблема происходит, когда пользователь нажимает кнопку назад форму «app2.mydomain.com» до «app1.mydomain.com», происхождение отправлено с запросом «app2.mydomain.com», и вот что такое услуга позволяет получить доступ к: HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", 'app2.mydomain.com');

Любой путь вокруг этого?

Обратите внимание, что я не могу поместить '*', потому что запросы аутентифицированы.

ответ

0

вы пытались положить в вашем StratUp.cs файл что-то вроде:

var corsPolicy = new CorsPolicy 
      { 
       AllowAnyMethod = true, 
       AllowAnyHeader = true, 
       SupportsCredentials = true, 
       Origins = { "http://site1.example.com", "http://site2.emaple.com.:38091", "http://localhost:39372" } 

      }; 

      app.UseCors(new CorsOptions 
      { 
       PolicyProvider = new CorsPolicyProvider 
       { 
        PolicyResolver = context => Task.FromResult(corsPolicy) 
       } 
      }); 

И в вашем web.config в вашем вебсервер разделе, может быть, как это:

<system.webServer> 
    <modules> 
     <remove name="FormsAuthentication" /> 
    </modules> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 
+0

На самом деле я использую, проект Web Api использует файл 'global.asax' не 'StratUp.cs' Я пытался использовать HttpContext.Current.Response.AddHeader («Access-Control-Allow-Origin», «app1.mydomain.com, app2.mydomain. ком "); – yass

+0

нормально, как вы предпочитаете ... но вы пытались сделать то, что я вам предлагаю? .. это работает? –

+0

Я так выразился: HttpContext.Current.Response.AddHeader («Access-Control-Allow -Origin», «app1.mydomain.com, app2.mydomain.com»); но он не работает, он не принимает несколько доменов в значении заголовка, ошибка говорит о том, что он должен быть одним доменом – yass

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