Asp.net mvc ASP.NET MVC-如何在自定义授权筛选器中获取命名空间?

Asp.net mvc ASP.NET MVC-如何在自定义授权筛选器中获取命名空间?,asp.net-mvc,asp.net-mvc-4,authorization,action-filter,authorize-attribute,Asp.net Mvc,Asp.net Mvc 4,Authorization,Action Filter,Authorize Attribute,我必须实现自定义授权过滤器 (检查是否授权,需要名称空间、控制器名称和操作名称) 我无法获得名称空间。这是我的密码: ExampleController.cs: namespace ExampleProject.Controllers { public class ExampleController : Controller { [CustomAuth()] public string Index()

我必须实现自定义授权过滤器

(检查是否授权,需要名称空间、控制器名称和操作名称)

我无法获得名称空间。这是我的密码:

ExampleController.cs:

namespace ExampleProject.Controllers 
{
    public class ExampleController : Controller 
    {
        [CustomAuth()]              
        public string Index() 
        {        
            return "OK";
        }
    }
}
namespace ExampleProject.Infrastructure.Filters
{
     public class CustomAuthAttribute : AuthorizeAttribute 
     {
          protected override bool AuthorizeCore(HttpContextBase httpContext) 
          {
              string currentNamespace = string.Empty;
              string currentController = string.Empty;
              string currentAction = string.Empty;

              var routeData = httpContext.Request.RequestContext.RouteData;

              currentController = routeData.GetRequiredString("controller"); //Example
              currentAction = routeData.GetRequiredString("action");         //Index

              currentNamespace = How???????   // ExampleProject.Controllers

              ...
          }
     }
}
CustomAuthFilter.cs:

namespace ExampleProject.Controllers 
{
    public class ExampleController : Controller 
    {
        [CustomAuth()]              
        public string Index() 
        {        
            return "OK";
        }
    }
}
namespace ExampleProject.Infrastructure.Filters
{
     public class CustomAuthAttribute : AuthorizeAttribute 
     {
          protected override bool AuthorizeCore(HttpContextBase httpContext) 
          {
              string currentNamespace = string.Empty;
              string currentController = string.Empty;
              string currentAction = string.Empty;

              var routeData = httpContext.Request.RequestContext.RouteData;

              currentController = routeData.GetRequiredString("controller"); //Example
              currentAction = routeData.GetRequiredString("action");         //Index

              currentNamespace = How???????   // ExampleProject.Controllers

              ...
          }
     }
}
如何获取名称空间


非常感谢。

约定优先于配置

如果遵守此规则,您可以轻松获取
ExampleProject.Controllers
,因为所有控制器都位于Controllers文件夹中,如果您不手动更改此约定,则可以安全地获取控制器的命名空间,但如果您更改了命名空间

   public class CustomAuthAttribute : AuthorizeAttribute
    {
        public string controllerFullName { get; set; }
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            string currentNamespace = string.Empty;
            string currentController = string.Empty;
            string currentAction = string.Empty;

            var routeData = httpContext.Request.RequestContext.RouteData;

            currentController = routeData.GetRequiredString("controller"); //Example
            currentAction = routeData.GetRequiredString("action"); //Index
             currentNamespace = controllerFullName.Substring(0, controllerFullName.IndexOf("." + currentController, System.StringComparison.Ordinal));

            return false;
        }
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            controllerFullName = filterContext.Controller.ToString();
            base.OnAuthorization(filterContext);
        }


    }

您想用名称空间做什么?