Membership.GetUser()返回NULL

时间:2016-04-25 19:55:33

标签: asp.net-mvc-4 simplemembership

我有多个共享成员资格数据库的应用程序。在提交控制器中,我尝试获取用户名:

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;
        ...
    }
}

我错过了什么?

1 个答案:

答案 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);
        }

让我知道它是否适合你:)