如何在整个ASP .NET MVC应用程序中进行授权
我创建应用程序,除了那些启用登录的操作之外的每个操作都应该超出未登录用户的限制。
我应该在每个class级的标题之前添加[Authorize]
注释吗? 像这儿:
namespace WebApplication2.Controllers { [Authorize] public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } } }
或者有一个捷径? 如果我想在特定控制器中更改一个且仅限操作的规则,该怎么办?
最简单的方法是在filter配置中添加Authorize
属性,以将其应用于每个控制器。
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); //Add this line filters.Add(new AuthorizeAttribute()); } }
另一种方法是让所有控制器inheritance自基类。 这是我经常做的事情,因为几乎总有一些共享代码,我的所有控制器都可以使用:
[Authorize] public abstract class BaseSecuredController : Controller { //Various methods can go here }
现在,所有控制器都应该inheritance这个新类,而不是inheritance自Controller
。
public class MySecureController : BaseSecuredController { }
注意:当您需要非登录用户可以访问时,不要忘记添加AllowAnonymous
属性。
为了构建DavidG
的答案,如果您需要某个角色(例如,在Windows authentication
,每个人都获得授权),您可以执行以下操作:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new AuthorizeAttribute { Roles = "MyApp Access" }); } }
- Asp.net调用C#层调用Managed C ++调用Native C ++
- 使用c#在asp.net中使用Windows身份validation
- 当为输入字段asp.net mvc输入不正确的数据类型时,覆盖错误消息(值’xxx’对Age无效)
- Quartz.net并不总是有效
- 如何将openssl_pkey_get_public和openssl_verify转换为C#.NET
- 解析“查询字符串”格式化数据的最简单方法
- 处理ASP.NET Core 1.0上的大型文件上传
- ASP.NET加密 – aspnet_regiis – Farm
- 如何阻止asp.net阻止对文件的访问,然后在构建时抛出访问被拒绝的错误?