C# ASP.NET MVC控制器授权最佳实践
以下哪种解决方案被认为是控制器授权的最佳实践(注意C# ASP.NET MVC控制器授权最佳实践,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,以下哪种解决方案被认为是控制器授权的最佳实践(注意AllowAnonymous和Authorize属性的位置)。这两种方法中的任何一种都比另一种有任何优点/缺点,或者这只是一个没有实际意义的问题 解决方案1 解决方案2 如果要在同一个控制器中混合匿名和经过身份验证的控制器操作,我会选择#2。如果忘记添加[AllowAnonymous],您会很快注意到它 另一方面,如果您忘记在#1中添加[Authorize],您可能会向公众公开一个不应该被公开的控制器操作 话虽如此,我还是会在不同的控制器(或者如
AllowAnonymous
和Authorize
属性的位置)。这两种方法中的任何一种都比另一种有任何优点/缺点,或者这只是一个没有实际意义的问题
解决方案1
解决方案2
如果要在同一个控制器中混合匿名和经过身份验证的控制器操作,我会选择#2。如果忘记添加
[AllowAnonymous]
,您会很快注意到它
另一方面,如果您忘记在#1中添加[Authorize]
,您可能会向公众公开一个不应该被公开的控制器操作
话虽如此,我还是会在不同的控制器(或者如果站点足够大的话,在不同的区域)将站点的授权部分与匿名部分分开。在我看来,将两者混合在同一个控制器中,然后依赖开发人员记住在方法上添加一个属性,这是规则的例外,从长远来看,这只是自找麻烦。我同意Craig的观点。我通常会将以下代码添加到我的全局
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
//Add this so all controllers need Authorization
filters.Add(new AuthorizeAttribute());
}
}
确保我的所有控制器都需要授权
[Authorize]
public class FooController : Controller
{
[AllowAnonymous]
public IActionResult Index()
{
return View();
}
}
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
//Add this so all controllers need Authorization
filters.Add(new AuthorizeAttribute());
}
}