2016-04-25 66 views
2

我有多個共享成員資格數據庫的應用程序。在提交控制器,我試圖獲取用戶名:Membership.GetUser()返回NULL

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

我試圖做類似你,你有共同的數據庫和不同的會員供應商,爲我工作的辦法東西下列之一:

在項目的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); 
     } 

讓我知道,如果你的作品,以及:)