【问题标题】:How do I instantiate the Profile from an ashx file?如何从 ashx 文件实例化配置文件?
【发布时间】:2015-05-01 20:58:23
【问题描述】:

我最近将一些 AJAX 查询切换为使用 ashx 文件而不是 aspx,发现 Response.End 不再流行。在我现在看到的情况下,采购订单的提交由 ashx 处理。用户单击 PO 上的提交按钮,ashx 文件将时间和用户记录在数据库表中。具有当前用户数据(包括他们的主键)的对象存储在 Session 中,并由自定义 Profile Provider 记录在那里。我添加了IReadOnlySessionState 以便能够访问会话,但似乎除非访问了另一个.net 页面,否则配置文件提供程序不会运行并且会话没有值。 (通过单步执行代码进行验证。)

我尝试了IRequiresSessionState,但结果相同。

我假设 System.Web.UI.Page HttpHandler 会实例化自定义配置文件(如果尚未实例化),我需要将其添加到我的自定义 HttpHandler 中。

我简要查看了 HttpModules,但我认为这不是我想要的,因为它们会为每个请求加载。

【问题讨论】:

  • 您是说您使用的是自定义配置文件提供程序吗?该提供者是否将数据放入会话中?!这似乎是一个 rube-goldberg 机器。
  • @JJS - 是的,是的。你说像 Rube Goldberg 这样的机器并不酷,哈哈。我可能是在 10 年前从一个经典的 asp 站点移植时写的。我怀疑我是这样做的,因为 Profile 似乎是放置该信息的地方,而 asp 应用程序使用 Session 来存储配置文件信息。回想起来,我可能应该使用 Profile 自定义属性,或者作为访问 Session 的自定义 Profile 上的一个函数。其中任何一个都可以解决在访问 Session 之前实例化 Profile 对象的问题。
  • Rube Goldberg 机器在工作时非常酷,但维护起来很麻烦。如果我们在 10 年前知道的时候知道今天,我们会以不同的方式做事。事后看来是 20/20。

标签: asp.net httphandler ashx profile-provider


【解决方案1】:

HttpContext.Current.Profile 的值是多少? Profile 属性在请求生命周期的 AcquireRequestState 阶段由内置的 HttpModule ProfileModule 填充。

http://odetocode.com/articles/440.aspx 这里有很多关于内部工作原理的信息。

【讨论】:

  • 看起来我得到了一个 ProfileCommon 类型的对象。但是随后错误消失了,这可能意味着它在被访问时正在被实例化。我去看看这篇文章。
  • 您之前是如何访问个人资料的?是的,访问时实例化referencesource.microsoft.com/#System.Web/…
  • 我正在调用一个访问会话值的函数(应该由自定义配置文件填充)。我的代码可能先于其他任何东西访问了 aspx 页面上的配置文件。我会进行测试。
  • 好的,默认情况下,配置文件似乎未在默认 System.Web.UI.Page 上实例化。我派生的 Page 类在标题中打印出用户名,因此它总是可用的。感谢这些很棒的资源链接。
  • 很高兴能为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2023-03-13
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
相关资源
最近更新 更多