我有一個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');
任何解決方法?
請注意,我不能放'*',因爲請求已通過身份驗證。
其實我使用, Web Api項目使用'global.asax'文件而不是'StratUp.cs' 我試圖HttpContext.Current.Response.AddHeader(「Access-Control-Allow-Origin」,「app1.mydomain.com,app2.mydomain。 COM「); – yass
好吧,你更喜歡...但你有沒有試過像我向你建議的? ..它工作嗎? –
我這樣說:HttpContext.Current.Response.AddHeader(「Access-Control-Allow -Origin」,「app1.mydomain.com,app2.mydomain.com」);但它不工作,它不接受標題值中的多個域,錯誤表示它必須是單個域 – yass