ASP.NET MVC4重定向到登录页面

Mah*_*asi 23 c# asp.net-mvc asp.net-mvc-4

我正在使用ASP.NET MVC 4和C#创建一个Web应用程序.

我想在使用应用程序之前登录所有用户.

我正在使用ASP.NET Membership与自定义数据库.

一种方法是检查Membership.GetUser()每个函数中是否为null.

但是,没有比在每个函数中检查用户登录状态更简单的方法吗?(也许检查web.config,global.asax等...... ??)

Bli*_*ndy 50

当然,装饰你的动作或整个班级,[Authorize]它将要求用户首先登录.

  • 有一个名为`<authentication>`的部分.在那里,你会有一行像`<forms loginUrl ="〜/ Account/LogOn"timeout ="2880"/>`只需更改那里的URL. (6认同)
  • ASP.NET MVC如何知道我的登录页面在哪里? (3认同)
  • 它位于`<authentication mode ="Forms">`标签下,在`<forms ... loginurl ='login'...>`下. (3认同)

Phi*_*idt 12

[Authorize]您希望仅登录用户访问的每个操作置于其后.您也可以在控制器级别执行此操作,使控制器内的所有操作都受到保护.后者可能最适合您,因为您可能只希望为访客禁用所有页面.

这是类级别的样子:

[Authorize]
public class SomethingController
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

这是一个行动级别的:

public class SomethingController
{
    [Authorize]
    public ActionResult SomeAction(Parameter someParameter)
    {
        //...   
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是,如果您的所有或大多数页面都使用相同的母版页,则应该:

<script type="text/javascript>
    @if(!Request.IsAuthenticated) {
        window.location.href = redirectURL;
    }
</script>
Run Code Online (Sandbox Code Playgroud)

或者如果你不使用剃刀语法,

<script type="text/javascript>  
    <% if(!Request.IsAuthenticated) { %>
        window.location.href = redirectURL;
    <% } %>
</script>
Run Code Online (Sandbox Code Playgroud)

在母版页中.这样,如果用户未登录,则使用该母版页的所有页面都将重定向到其他位置.但这仅适用于您使用内置身份验证的情况. 注意:此选项远不如第一个选项安全.仅在站点安全性不是一个大问题时才使用此选项


War*_*War 5

我知道这个问题已经有了答案,但如果目的是锁定整个应用程序,除了少数几个控制器操作,那么我觉得这是一个更好的解决方案......

在您的应用程序的启动/初始化中添加...

httpConfig.filters.Add(new AuthorizeAttribute());
Run Code Online (Sandbox Code Playgroud)

...然后在你的行动希望保护...

[AllowAnonymous]
public ActionResult Hello() { return View(); }
Run Code Online (Sandbox Code Playgroud)