2013-09-16 36 views
2

我有一個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中出現相同的行爲。

回答

0

我看到的是ReportView搞亂了cookie。可能你在WebApi的某處設置了cookie,它與ReportView Handle管道執行順序不同。

繼承人的的WebAPI的生命週期:ASP.NET WEB API: HTTP MESSAGE LIFECYLE

但是,您可以覆蓋ReportViewerServerConnection,使用IReportServerConnection,並且有堅持你的餅乾模式。

到這裏看看:Web.config Settings for ReportViewer

另一種方式應在自定義IHttpModule來建立餅乾,融入了ASP.NET管道,然後瞄準兩者WebApiReportView