【问题标题】:Can't get profile data in Application_Start无法在 Application_Start 中获取配置文件数据
【发布时间】:2012-07-17 11:17:47
【问题描述】:

我在 Application_Start 中的某个时间点有以下代码

MembershipUserCollection users = Membership.GetAllUsers();

foreach (MembershipUser u in users)
{
    ProfileBase profile = ProfileBase.Create(u.UserName, false);

    if (profile["Index"] != null)
    {
        // Some code
    }
}

问题是,当我尝试访问配置文件属性时,我得到“请求在此上下文中不可用”httpException。我尝试过使用 profile.GetPropertyValue 但也没有运气。

为什么配置文件需要请求对象,我怎样才能让它工作?

编辑:

我查看了 .NET 代码,发现在某些时候调用了 SqlProfileProvider.GetPropertyValuesFromDatabase(string userName, SettingsPropertyValueCollection svc),其中包含以下代码字符串:

if (!current.Request.IsAuthenticated)

显然,如果不在请求上下文中,这将永远不会起作用。 Onur 的答案中描述的解决方法可以正常工作。

【问题讨论】:

    标签: asp.net profile httpcontext application-start


    【解决方案1】:

    显然您正在尝试访问在您的情况下不可能的请求对象。

    请查看以下链接并尽可能应用其中一种解决方法。 http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart

    如果您提供更多信息,我们可以找到另一种方法。

    【讨论】:

    • 我已经阅读了集成模式。问题似乎出在 BaseProfile 中,它试图在属性访问中访问请求对象。我尝试在应用启动时聚合所有配置文件的 Index 属性。但在我在那篇文章中提出解决方法之前,我想确保我没有遗漏任何东西。
    • 为什么在这种情况下特别是请求对象?如果您不需要它,请创建一个空控件(或尝试块)并继续您的过程。
    • 我不使用 Request 对象,我需要从配置文件中获取属性值,当我尝试时会抛出异常。
    【解决方案2】:

    您可以通过查询 aspnet_Profiles 表并解析字符串来获取“字符串值”属性。

    SELECT [UserName]
      ,[PropertyNames]
      ,[PropertyValuesString]
    FROM [aspnet_Profile]
    LEFT JOIN [aspnet_Users] on [aspnet_Users].UserId = [aspnet_Profile].UserId
    

    PropertyValuesString 可以用一些代码来解析。这个链接应该详细解释格式https://msdn.microsoft.com/en-us/library/aa478953.aspx#persistence_format

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 2022-07-12
      • 2021-07-23
      相关资源
      最近更新 更多