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

时间:2012-07-26 15:18:48

标签: c# asp.net-mvc asp.net-mvc-4

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

我希望所有用户在使用应用程序之前都已登录。

我正在将ASP.NET成员资格用于自定义数据库。

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

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

6 个答案:

答案 0 :(得分:49)

当然,用[Authorize]装饰你的行动或整个班级,这将要求用户先登录。

答案 1 :(得分:12)

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

以下是类级别的内容:

[Authorize]
public class SomethingController
{
    //...
}

这是一个行动级别:

public class SomethingController
{
    [Authorize]
    public ActionResult SomeAction(Parameter someParameter)
    {
        //...   
    }
}

另一种方法是,如果您的所有或大部分页面都使用相同的母版页,那就是:

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

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

<script type="text/javascript>  
    <% if(!Request.IsAuthenticated) { %>
        window.location.href = redirectURL;
    <% } %>
</script>
主页面中的

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

答案 2 :(得分:4)

您可以编写自定义[Authorize]属性。然后简单地用它来装饰控制器/动作,或者如果所有动作都需要授权,你可以将它注册为全局动作过滤器。

答案 3 :(得分:4)

您可以将[Authorize]属性放在控制器上或控制器中的单个方法中,这样您就可以选择谁可以打开操作以及具有哪些权限。您还可以使用以下角色进行授权:[Authorize(Roles="Admin")]您只能授权管理员角色的用户访问您的操作/控制器。例如:

[Authorize(Roles="SimpleUser")] or with no roles [Authorize]
public ActionResult Index()
{
    return View();
}

[Authorize]
[HttpPost]
public ActionResult Index(FormCollection form)
{
    ... whatever logic
    return View();
}

希望这会有所帮助;]

答案 4 :(得分:4)

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

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

httpConfig.filters.Add(new AuthorizeAttribute());

...然后你不想想要保护的行动......

[AllowAnonymous]
public ActionResult Hello() { return View(); }

答案 5 :(得分:2)

在班级使用[授权]

如果您想允许匿名访问某些操作,请使用[AllowAnonymous]

相关问题