gpt4 book ai didi

c# - 带有 ReportViewerWebControl 的 WebAPI Cookie

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:23 25 4
gpt4 key购买 nike

我有一个 MVC 应用程序,它还包含一个 ASP.Net WebForm 来托管 MS ReportViewer Web 控件。我们广泛使用 WebAPI 以允许从 Knockout View 模型客户端进行客户端发布。

在此应用程序中,我们使用 cookie 来维护一些小的用户数据——一个 GUID、一个 int 和一个 bool。

我们目前看到的是应用程序正常工作,直到用户打开 ReportViewer。那时,我们无法再从请求 header 中读取任何 cookie。这已在多个浏览器中一致再现。

Fiddler 的检查显示 cookie 已正确发布到服务器。第一种情况,cookie值如下:

theCulture=en-US; ASP.NET_SessionId=uhmquapd1bgghpmfgy24oodf; .ASPXAUTH=6BC2F53F9CA0CF5A437998B206B564B28B5AB362153E6E0629C9142F9E3A0285494F674716A126E4632A932BCE12CE094FE590911CE5E97EA42D0C610A44D8462A15BA9A54760883DDF712B5B199C136413667954F094FEBA2A57826BC84702A4D90D7382E360594ABC2F9EBDCEE696B4662077F; special=theId=1077b59a-100d-429b-b223-f8f0508fdc27&staffingId=77096&isBackupUser=False

第二种情况,打开ReportViewer后,我们的cookies如下:

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 Controller 中返回 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 中导致相同的行为。

最佳答案

我看到的是 ReportView 弄乱了 cookie。可能您在 WebApi 中的某处设置了 cookie,它与 ReportView Handle 的管道执行顺序不同。

这是 WebApi 生命周期:ASP.NET WEB API: HTTP MESSAGE LIFECYLE

但是,您可以使用 IReportServerConnection 覆盖 ReportViewerServerConnection,并保留您的 cookie 模式。

看这里:Web.config Settings for ReportViewer

另一种方法应该是在自定义 IHttpModule 中设置 cookie,集成到 ASP.NET 管道中,然后同时针对两者,WebApiReportView

关于c# - 带有 ReportViewerWebControl 的 WebAPI Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18832452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com