Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC4重定向到登录页面_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

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

C# ASP.NET MVC4重定向到登录页面,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我正在使用ASP.NETMVC4和C创建一个web应用程序 我希望所有用户在使用应用程序之前都已登录 我将ASP.NET成员身份与自定义数据库一起使用 一种方法是检查每个函数中的Membership.GetUser是否为null 但是没有比在每个函数中检查用户登录状态更简单的方法了吗?可能正在签入web.config、global.asax等…?当然,可以用修改您的操作或整个类,这将要求用户首先登录。您可以编写自定义的[Authorize]属性。然后简单地用它装饰控制器/操作,或者如果所有操作都

我正在使用ASP.NETMVC4和C创建一个web应用程序

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

我将ASP.NET成员身份与自定义数据库一起使用

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


但是没有比在每个函数中检查用户登录状态更简单的方法了吗?可能正在签入web.config、global.asax等…?

当然,可以用修改您的操作或整个类,这将要求用户首先登录。

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

将[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>
或者如果您没有使用razor语法

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

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

在类级别使用[Authorize]

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

您可以在控制器或控制器中的单个方法上放置[Authorize]属性,以便选择可以打开操作的人和权限。您还可以使用如下角色进行授权:[AuthorizeRoles=Admin],其中您将仅授权具有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();
}

希望这有帮助;]

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

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

httpConfig.filters.Add(new AuthorizeAttribute());
。。。然后在你不想采取的行动上

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

以及ASP.NET MVC如何知道我的登录页面在哪里?该属性强制返回401错误代码,这将在ASP.NET的正常授权模块中启动。然后,您可以在web.config中设置登录页面或使用默认页面。您可以在web.config中进行设置。在属性下,有一个部分叫做。在那里,你会有一行,就像在那里更改URL一样。它在标签中,在下面。你能给出一个例子吗?只需从AuthorizeAttribute派生并重写AuthorizeCore方法。一个促进客户端身份验证的答案如何成为2012年被接受的答案…@Blindy可能是因为我在那里列出了它,作为我做这件事的替代方法?你知道,有几个应用程序的客户端身份验证并不是一件坏事。@Blindy lol,一种间接窃取rep的方法,我花了10分钟写了一个答案。更不用说你的答案和我的答案之间的详细程度甚至不可比。@Blindy无状态服务器?低容量、低安全性的网站?-我的1个,请不要把它当作个人隐私。这不是一个好方法,无论发生什么都毫无意义。永远不要使用客户端解决方案来实现安全性。我记得1995年GeoCities上的网站就是这样做的,当时这是常态。不推荐。