3

我已經實現了我自己的AccountProfile類是ASP.net MVC,它可以工作,但現在我遇到了一個奇怪的問題。首先,我在Views/Shared/_LoginPartial.cshtml中調用AccountProfile.MyProperty。 AccountProfile.MyProperty調用Membership.GetUser()。UserName來工作。現在,當我登錄帳戶時,登錄後,AccountProfile.MyProperty工作並呈現信息到html頁面。當應用程序啓動時,Membership.GetUser()返回null

但是,當我停止運行時,更改一些代碼,並再次啓動,Membership.GetUser()返回null,即使我仍然根據成員身份登錄。

頁面加載失敗後,如果我導航到/帳戶/登錄頁面,Membership.GetUser()工作。在它工作之後,我可以導航到在開始時不起作用的索引頁面,並且它可以工作。

我的問題是爲什麼當我的頁面第一次加載時Membership.GetUser()返回null?

謝謝。

+2

聽起來像你踢的身份驗證之前,請求Memberhip.GetUser() –

+0

怎樣才能。我爲此工作?如果我從賬戶/登錄頁面開始或到達賬戶/登錄頁面,GetUser從那裏開始工作(我甚至不登錄)。但是,如果我嘗試啓動另一個頁面上,它不工作:( –

+0

此外User.Identity.IsAuthenticated當Membership.GetUser()的返回null返回true。 –

回答

2

好吧,我發現周圍的車Membership.GetUser()函數工作。

HttpContext.Current.User.Identity.Name 

這段代碼獲取登錄的用戶名,它實際上似乎工作。如果我有任何問題,我會在這裏報告。

+0

真的嗎?爲什麼會有人「倒票」的解決我的問題?Membership.GetUser()顯然是返回null當用戶登錄和驗證。此外,它只返回空在用戶第一次嘗試加載主頁,但不是當他們試圖加載/帳號/登錄頁面。他們加載/帳號/登錄頁面後,他們就可以加載主頁罰款。 HttpContext.Current.User.Identity.Name作品,並Membership.GetUser()當用戶已經登錄和身份驗證不起作用。這是在MVC 4 .NET v4.5上。 –

+0

它downvoted,因爲它不是一個解決方案。你的代碼中有其他問題導致這種行爲。您的解決方案是解決方法,而不是解決方法。 – Peter

0

剛剛遇到同樣的問題。 在MVC 4中,使用過濾器InitializeSimpleMembershipAttribute對默認認證系統進行初始化(從生成的項目的源代碼中可以清楚地看到)。並且過濾器僅適用於AccountController(因此,一旦您訪問此控制器的登錄或任何其他頁面,認證系統將被初始化,並且您可以在需要它的任何地方正常使用Membership.GetUser())。

對於我目前的項目,快速和骯髒的解決辦法是有一定的控制,這樣的定義:

[InitializeSimpleMembership] 
public abstract class DefaultController : Controller 
{} 

而且從DefaultController獲得我的應用程序的其它控制器,而不是從控制器直接。 此外,這種技術在一個地方有很好的常用屬性(如dbcontext變量等)。

0

添加[InitializeSimpleMembership]到控制器

例子:

using System.Linq; 
using System.Web.Mvc; 
using System.Web.Security; 
using Bencsharp.BL.Services; 
using Bencsharp.Mvc.Filters; 
using Bencsharp.Mvc.Models; 

namespace Bencsharp.Mvc.Controllers 
{ 
    [InitializeSimpleMembership] 
    public class HomeController : Controller 
    { 
     // ... 
    } 
} 
1

試試這個

using Microsoft.AspNet.Identity; 

var id = User.Identity.GetUserId(); 
相關問題