我正在使用 ASP.NET MVC 4 和 C# 创建一个 Web 应用程序。
我希望所有用户在使用应用程序之前都已登录。
我正在使用带有自定义数据库的 ASP.NET 成员资格。
一种方法是检查Membership.GetUser()
每个函数是否为空。
但是没有比在每个函数中检查用户登录状态更简单的方法了吗?(也许检查 web.config、global.asax 等...??)
我正在使用 ASP.NET MVC 4 和 C# 创建一个 Web 应用程序。
我希望所有用户在使用应用程序之前都已登录。
我正在使用带有自定义数据库的 ASP.NET 成员资格。
一种方法是检查Membership.GetUser()
每个函数是否为空。
但是没有比在每个函数中检查用户登录状态更简单的方法了吗?(也许检查 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>
或者如果你不使用剃刀语法,
<script type="text/javascript>
<% if(!Request.IsAuthenticated) { %>
window.location.href = redirectURL;
<% } %>
</script>
在母版页中。这样,如果用户未登录,所有使用该母版页的页面都将重定向到其他地方。但这仅适用于您使用内置身份验证的情况。 注意:此选项远不如第一个选项安全。仅当站点安全不是大问题时才使用此选项
我知道这个问题已经有了答案,但如果打算锁定整个应用程序,除了少数几个控制器操作,那么我觉得这是一个更好的解决方案......
在您的应用程序的启动/初始化中添加...
httpConfig.filters.Add(new AuthorizeAttribute());
...然后在您不想保护的操作上...
[AllowAnonymous]
public ActionResult Hello() { return View(); }
您可以将[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();
}
希望这可以帮助 ;]
您可以编写自定义[Authorize]
属性。然后简单地用它装饰控制器/动作,或者如果所有动作都需要授权,您可以将其注册为全局动作过滤器。
在类级别使用 [Authorize]
如果您想允许匿名访问某些操作,请使用 [AllowAnonymous]