Asp.net mvc ASP.NET MVC-如何在自定义授权筛选器中获取命名空间?
我必须实现自定义授权过滤器 (检查是否授权,需要名称空间、控制器名称和操作名称) 我无法获得名称空间。这是我的密码: ExampleController.cs: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()
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);
}
}
您想用名称空间做什么?