-->

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

2019-09-22 23:01发布

我实现了我自己的AccountProfile类是ASP.net MVC和它的作品,但现在我遇到一个奇怪的问题。 首先,我在查看/共享/ _LoginPartial.cshtml调用AccountProfile.MyProperty。 AccountProfile.MyProperty使得以Membership.GetUser()。用户名调用工作。 现在,当我“注册”为一个账户,我登录后,AccountProfile.MyProperty工程和信息呈现到HTML页面。

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

页面加载失败,如果我浏览到/帐号/登录页面后,Membership.GetUser()的作品。 它的工作原理之后,我就可以导航到该索引页没有在开始工作,它的工作原理。

我的问题是为什么Membership.GetUser()返回NULL,当我第一次加载页面呢?

谢谢。

Answer 1:

好吧,我发现周围的车Membership.GetUser()函数工作。

HttpContext.Current.User.Identity.Name

这段代码获取用户名的记录,并且它实际上似乎工作。 如果我有任何问题,我会回来向我报告。



Answer 2:

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

  • FormsAuthentication Membership.GetUser()空
  • 获取表单验证当前的MembershipUser

希望这可以帮助



Answer 3:

尝试这个

using Microsoft.AspNet.Identity;

var id = User.Identity.GetUserId();


Answer 4:

对面同样的问题来了。 在MVC 4,默认的认证系统是使用过滤器初始化InitializeSimpleMembershipAttribute (这是从生成的项目的源代码很清楚)。 和过滤仅适用于AccountController (一旦你访问登录或该控制器的任何其他页面,认证系统进行初始化,您可以用so, Membership.GetUser()通常只要您需要它)。

对于我目前的项目,快速和肮脏的解决办法是有一定的控制,这样的定义:

[InitializeSimpleMembership]
public abstract class DefaultController : Controller
{}

并获得我的应用程序从其他控制器DefaultController ,而不是从控制器直接。 此外,该技术是关于具有常用的属性(如的DbContext变量等),在一个位置不错。



Answer 5:

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


文章来源: Membership.GetUser() is returning null when app starts