我有一個MVC應用程序,它還包含一個ASP.Net WebForm來託管MS ReportViewer Web控件。我們廣泛使用WebAPI來允許來自Knockout viewmodels客戶端的客戶端發佈。帶ReportViewerWebControl的WebAPI Cookie
在這個應用程序中,我們利用cookies來保留一些小部分用戶數據 - 一個GUID,一個int和一個bool。
我們目前看到的是,應用程序正常工作,直到用戶打開ReportViewer。那時,我們不再能夠從請求頭中讀取任何cookie。這一直在幾個瀏覽器中被轉載。
使用Fiddler進行的檢查發現,Cookie已正確發佈到服務器。在第一種情況下,cookie值如下:
theCulture = zh-CN; ASP.NET_SessionId = uhmquapd1bgghpmfgy24oodf; .ASPXAUTH = 6BC2F53F9CA0CF5A437998B206B564B28B5AB362153E6E0629C9142F9E3A0285494F674716A126E4632A932BCE12CE094FE590911CE5E97EA42D0C610A44D8462A15BA9A54760883DDF712B5B199C136413667954F094FEBA2A57826BC84702A4D90D7382E360594ABC2F9EBDCEE696B4662077F;特殊= theId = 1077b59a-100D-429B-B223-f8f0508fdc27 & staffingId = 77096 & isBackupUser =假
在第二種情況下,在打開的ReportViewer後,我們的Cookie如下:
theCulture = EN-US; ASP.NET_SessionId = uhmquapd1bgghpmfgy24oodf; .ASPXAUTH = 6BC2F53F9CA0CF5A437998B206B564B28B5AB362153E6E0629C9142F9E3A0285494F674716A126E4632A932BCE12CE094FE590911CE5E97EA42D0C610A44D8462A15BA9A54760883DDF712B5B199C136413667954F094FEBA2A57826BC84702A4D90D7382E360594ABC2F9EBDCEE696B4662077F; special = theId = 1077b59a-100d-429b-b223-f8f0508fdc27 & staffingId = 77096 & isBackupUser = False; /Reserved.ReportViewerWebControl.axd%3FOpType%3DSessionKeepAlive%26ControlID%3Dc3b959ab1a7c42e6a9fed5d2762a8c86_SKA=1
在這一點,我們可以不再的WebAPI閱讀。在WebAPI控制器中返回Cookie的方法是這樣的:
public OurType GetApproverInfo()
{
OurType data = new OurType();
CookieHeaderValue cookie = Request.Headers.GetCookies("special").FirstOrDefault();
CookieState cookieState = cookie["special"];
data.Id = Guid.Parse(cookieState["theId"]);
data.StaffingId = Int32.Parse(cookieState["staffingId"]);
data.IsBackupUser = bool.Parse(cookieState["isBackupUser"]);
return data;
}
其他人看過類似的東西?
更新:我剛剛瞭解到,在名稱中使用前導/創建cookie會導致WebAPI中出現相同的行爲。