2016-04-25 3 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

私はあなたが共通DBと異なる会員プロバイダを持ってどこに似た何かをしようとした、私のために働いたアプローチは、次のいずれかです。

プロジェクトの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> 

ようにあなたは、次のステップは、あなたの[ASPNETにアプリケーションを追加するだろうとした後、あなたのweb.configファイル

内の既存のノードの下に1行を追加する必要があります。 _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); 
     } 

が、それは同様にあなたのために動作するかどうか、私に教えてください:)

を:あなたはこれをしたら

次のコードを使用して、ユーザーを探すことができます

関連する問題