我有多个共享成员资格数据库的应用程序。在提交控制器中,我尝试获取用户名:
var userId = (int)Membership.GetUser().ProviderUserKey;
但它总是给我错误:
Object reference not set to an instance of an object.
它在其他应用程序上运行得很好。我只对这个应用程序有问题。以下是我的提交控制器:
[Authorize]
[OutputCache(Duration = 0)]
[InitializeSimpleMembership]
public class SubmissionsController : Controller
{
private ProductionReportDBEntities db = new ProductionReportDBEntities();
public ActionResult Index()
{
var u = Membership.GetUser().ProviderUserKey;
...
}
}
我错过了什么?
答案 0 :(得分:0)
我尝试做类似于你的事情,你有共同的数据库和不同的成员资格提供者,对我有用的方法如下:
在项目的web.config文件中,您应该有类似
的内容<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ConnString" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="ApplicationName" description="Description" requiresUniqueEmail="true" passwordFormat="Encrypted" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" />
</providers>
</membership>
如果您想拥有多个会员资格,则需要在web.config中的现有节点下添加一行
之后,下一步是将应用程序添加到[aspnet_applications]表和[aspnet_users]表中,您将需要包含属于该应用程序的用户(请记住,具有ApplicationName属性)匹配您的应用程序名称。)
完成后,您可以使用以下代码查找用户:
MembershipUser user = null;
foreach (MembershipProvider prov in Membership.Providers)
{
int rec = 0;
prov.FindUsersByName(username, 0, 1, out rec);
if (rec > 0)
user = prov.GetUser(username: username, userIsOnline: true);
}
让我知道它是否适合你:)