我在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的答案中描述的解决方法将正常工作。
答案 0 :(得分:1)
显然,您正在尝试访问在您的情况下无法访问的请求对象。
如果可能,请查看以下链接并应用其中一种解决方法。 http://mvolo.com/iis7-integrated-mode-request-is-not-available-in-this-context-exception-in-applicationstart
如果你提供更多信息你想要实现什么,我们可以找到另一种方式。
答案 1 :(得分:0)
你可以获得"字符串值"通过查询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。