应用程序启动时,Membership.GetUser()返回null

时间:2012-09-25 02:13:37

标签: c# asp.net asp.net-mvc asp.net-membership membership-provider

我已经实现了我自己的AccountProfile类是ASP.net MVC并且它可以工作但是现在我遇到了一个奇怪的问题。首先,我在Views / Shared / _LoginPartial.cshtml中调用AccountProfile.MyProperty。 AccountProfile.MyProperty调用Membership.GetUser()。UserName工作。现在,当我“注册”一个帐户时,在我登录后,AccountProfile.MyProperty工作并将信息呈现到html页面。

然而,当我停止运行,更改一些代码并再次启动时,Membership.GetUser()返回null,即使我仍然根据成员身份登录。

页面加载失败后,如果我导航到/ Account / Login页面,则Membership.GetUser()可以正常工作。在它工作之后,我可以导航到在开始时不起作用的索引页面,并且它可以工作。

我的问题是为什么当我的页面首次加载时,Membership.GetUser()会返回null?

感谢。

5 个答案:

答案 0 :(得分:2)

好吧,我找到了一个关于有缺陷的Membership.GetUser()函数的工作。

HttpContext.Current.User.Identity.Name

这段代码获取登录的用户名,实际上它似乎有效。如果我有任何问题,我会在这里报告。

答案 1 :(得分:1)

请看下面的帖子,也许你有同样的问题? :

希望这有帮助

答案 2 :(得分:1)

试试这个

using Microsoft.AspNet.Identity;

var id = User.Identity.GetUserId();

答案 3 :(得分:0)

刚遇到同样的问题。 在MVC 4中,使用过滤器InitializeSimpleMembershipAttribute初始化默认身份验证系统(从生成的项目的源代码中可以很清楚)。过滤器仅应用于AccountController(因此,一旦您访问此控制器的登录或任何其他页面,就会初始化身份验证系统,您可以在任何需要的地方使用Membership.GetUser()。)

对于我目前的项目,快速而肮脏的解决方案是拥有一些控制器,定义如下:

[InitializeSimpleMembership]
public abstract class DefaultController : Controller
{}

DefaultController派生我的应用程序的其他控制器,而不是直接从Controller派生。 此外,这种技术很适合在一个地方使用常用属性(如dbcontext变量等)。

答案 4 :(得分:0)

将[InitializeSimpleMembership]添加到Controller

示例:

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
    {
        // ...
    }
}