Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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 MVC控制器授权最佳实践_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

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());
    }
}