2016-04-25 13 views
2

Ich habe mehrere Anwendungen, die eine Mitgliedschaftsdatenbank verwenden. In der Submission-Controller, versuche ich, den Benutzernamen zu erhalten:Membership.GetUser() gibt NULL zurück

var userId = (int)Membership.GetUser().ProviderUserKey; 

Aber es gibt mir immer den Fehler:

Object reference not set to an instance of an object. 

es auf den anderen Anwendungen funktioniert gut. Ich habe nur ein Problem mit dieser Anwendung. Unten ist mein Submission Controller:

[Authorize] 
[OutputCache(Duration = 0)] 
[InitializeSimpleMembership] 
public class SubmissionsController : Controller 
{ 
    private ProductionReportDBEntities db = new ProductionReportDBEntities(); 

    public ActionResult Index() 
    { 
     var u = Membership.GetUser().ProviderUserKey; 
     ... 
    } 
} 

Was habe ich verpasst?

Antwort

0

Ich habe versucht, etwas Ähnliches wie Sie tun, wo Sie gemeinsam DB und verschiedene Mitgliedschaftsanbieter haben, der Ansatz, für mich ist das folgende gearbeitet:

In der Datei web.config Ihres Projekts Sie etwas haben sollte wie

<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> 

Wenn Sie mehrere Mitgliedschaften haben wollen, müssen Sie eine weitere Zeile unter dem vorhandenen Knoten in Ihrer web.config

Danach ist der nächste Schritt hinzufügen würde die Anwendung auf Ihren [aspnet das hinzufügen _applications] table und in der Tabelle [aspnet_users] müssen Sie einen Benutzer einbeziehen, der zu dieser Anwendung gehört (beachten Sie, dass das ApplicationName-Attribut in Ihrem Anwendungsnamen übereinstimmen muss).

Sobald Sie diese haben, können Sie mit dem folgenden Code für den Benutzer aussehen:

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

Lassen Sie mich wissen, ob es für Sie funktioniert auch :)