Asp net Identity,从HomeController调用AccountController,并在UserMenager中遇到麻烦

时间:2016-07-14 10:56:19

标签: asp.net-mvc asp.net-identity

所以我成功实现了帐户控制器及其附带的各种方法。我有一个特定的方法返回AppUser(当前用户)

public AppUser GetCurrentUser(){
       AppUser user = UserMenager.FindById(User.Identity.GetUserId());
       return user; }.

现在我不想在我的所有控制器中都有UserMenager的实例(或者我应该?),所以在我的HomeController中我需要根据用户是否登录来渲染局部视图,所以我称之为方法

public ActionResult RightNavigation()
        {   
            // account is instance of AccountController
            AppUser user = account.GetCurrentUser();

            if (user == null)
            {
                return PartialView("NavWhenNotLogged");
            }
            else
            {
                return PartialView("NavWhenLogged",user);
            }
        }

问题是,我在Account Controller中的UserMenager实例得到NullException:

private AppUserMenager UserMenager
        {
            get
            {
                return HttpContext.GetOwinContext().GetUserManager<AppUserMenager>();
            }
        }

现在我认为这不是在不同控制器中“共享”UserMenager的正确方法,所以如果你能给我''这种方式'。

总结:我的帐户控制器有各种关于用户等的方法。当我尝试使用其中一种依赖于UserMenager的方法时,我得到UserMenager的Null Exception。

2 个答案:

答案 0 :(得分:2)

在Startup类中,您需要在Configuration方法中调用以下行,该方法将ApplicationUserManager的实例放入OwinContext中以用于每个请求。

INSERT INTO mytable SET `block_column` = 123;
SELECT `blob_column` FROM `mytable`

UserManager.Create()是一个返回实例的静态方法。

不要从另一个控制器呼叫控制器。要获取UserManager,您可以在任何控制器的操作中执行此操作:

    public void Configuration(IAppBuilder app)
    {
        app.CreatePerOwinContext<UserManager>(UserManager.Create);
    }

答案 1 :(得分:0)

#include <glut.h>

/*
System Info
-------------
OS: Win7 professional 64-bit SP1
CPU: Intel i3-4170 @ 3.70GHz
GPU: HD Graphics 4400
*/

void display(void) {
    // 20541 ok, 20542 not visible
    // 30320 ok, 30321 not visible
    const GLfloat z = 20541;

    const GLfloat far = 1000, near = 0.1;

    GLfloat vertices[4 * 3] = {
        -far, -far, z - far,
        far, far, z - far,
    };

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt(0, 0, z, 0, 0, z - 1, 0, 1, 0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glFrustum(-0.1, 0.1, -0.1, 0.1, near, far);

    glColor3f(0, 1, 1); // blue

    glBegin(GL_LINES);
    glVertex3f(vertices[0], vertices[1], vertices[2]);
    glVertex3f(vertices[3], vertices[4], vertices[5]);
    glEnd();

    glFlush();
}

int main() {
    glutCreateWindow("");
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

在默认的MVC5项目中,如果用户是否登录_LoginPartial.cshtml,则会进行样本检查。