0

我正在使用 ABCPDF.net 将我的 HTML 呈现为 PDF 页面,但我想使用当前经过身份验证的会话来保护这些页面。但是,获取 HTML 以呈现 PDF 的请求不会延续会话,而是创建一个新会话。我正在使用 ASP.NET 成员资格,并在会话 ID 中传递并在 ASP.NET 请求上创建 cookie。

    var sessionId = HttpUtility.ParseQueryString(Url)["sid"];

    if(sessionId != null)
    {
        doc.HtmlOptions.HttpAdditionalHeaders = string.Format("Cookie: 
                                    ASP.NET_SessionId={0}", sessionId);
    }

我在 ABCPDF.net 文档中阅读了这个并且正在这样做,但请求总是使用不同的会话。

httpadditionalheaders

我需要传递其他东西,还是可以做其他事情?

4

1 回答 1

1

通过在 URL 中发送 auth cookie 并更新 cookie 来修复它。

要调用的网址

Url.ActionAbsolute(MVC.Events.Pools(eventId).AddRouteValue(FormsAuthentication.FormsCookieName, Request.Cookies[FormsAuthentication.FormsCookieName].Value)

全球.asax

  protected void Application_BeginRequest()
        {
            try
            {
                string auth_cookie_name = FormsAuthentication.FormsCookieName;

                if (HttpContext.Current.Request.Form[FormsAuthentication.FormsCookieName] != null)
                {
                    UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[FormsAuthentication.FormsCookieName]);
                }
                else if (HttpContext.Current.Request.QueryString[FormsAuthentication.FormsCookieName] != null)
                {
                    UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[FormsAuthentication.FormsCookieName]);
                }

            }
            catch
            {
            }
        }

        void UpdateCookie(string cookieName, string cookieValue)
        {
            HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookieName);
            if (cookie == null)
            {
                cookie = new HttpCookie(cookieName);
                HttpContext.Current.Request.Cookies.Add(cookie);
            }
            cookie.Value = cookieValue;
            HttpContext.Current.Request.Cookies.Set(cookie);

    }
于 2012-10-05T19:26:58.897 回答