gpt4 book ai didi

asp.net-mvc-3 - MVC 自定义操作属性

转载 作者:行者123 更新时间:2023-12-02 20:10:05 25 4
gpt4 key购买 nike

在测试期间(至少),我们正在记录每个 Controller /操作的一些低级信息。所有 Controller 都派生 self 们的自定义 BaseController,它重写 OnActionExecuting 来执行日志记录。

我们在 BaseController 中有一个属性来确定是否会发生此日志记录,以便 Controller 可以重写 OnActionExecuting 本身,重置标志,然后调用“base.OnActionExecuting”。该标志通常为 true,但例如,我们希望针对某些 Json 请求将其关闭。

我们更愿意做的是创建一个自定义 Controller /操作过滤器来处理这个问题,如下所示:

[LogPageAccess(false)]
[HttpGet]
Public ActionResult Foobar()

我确信有办法做到这一点,但我无法弄清楚如何创建自定义属性并让它在 BaseController 中重置标志。

谢谢...

最佳答案

在我的项目中,我使用以下内容来验证访问 Controller :

    [Capability(UserCapability.FileManagement)]
public ActionResult FileList(FileListRequestModel request, bool ajax = false)
{
//code
}

这是我的能力等级

/// <summary>
/// Decorator to MVC class and method to evaluate if a certain capability is enabled
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class CapabilityAttribute : AuthorizeAttribute
{
#region Class Attributes

private object _capability = null;

#endregion

#region Public Methods

/// <summary>
/// Create a new capability attribute
/// </summary>
/// <param name="capability">Context Value passed to the validator</param>
public CapabilityAttribute(object capability)
{
this._capability = capability;
}

/// <summary>
/// Check if attribute is enabled
/// </summary>
/// <param name="filterContext"></param>
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (!Capability.Enabled(this._capability))
{
throw new UnauthorizedAccessException();
}
else
{
base.OnAuthorization(filterContext);
}
}

#endregion
}

您只需根据您的情况调整此代码,我希望它有用

关于asp.net-mvc-3 - MVC 自定义操作属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com