从 HandleErrorAttribute 中获取 Action 的属性
Get Attributes of Action from within HandleErrorAttribute
我有一个位于控制器顶部的自定义错误属性:
public class JsonExceptionAttribute : HandleErrorAttribute
{
private ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public override void OnException(ExceptionContext errorContext)
{
if (errorContext.ExceptionHandled) return;
if (!errorContext.Action.Attributes.ContainsType(typeof(DontLogPathAttribute)) { // THIS IS PSEUDOCODE
_log.Error($"Oopsie. {HttpContext.Current.Request.Path}");
}
}
}
在我的控制器之上,我只需添加我的属性:
[JsonException]
public class UserController {
public ActionResult JustAnAction{}
[DontLogPath]
public ActionResult SelfService(string myHash, int userId) {}
}
我通常会记录 Api-Call 的路径以防出错。但是有一些我不想那样做的动作。这些案例有 DontLogPathAttribute
(这只是一个空属性 -class)
在 ExceptionHandling (OnException
) 中我想知道这个 Attribute 是否存在。但是在 exceptionContext 中我什至没有找到 属性 来确定当前的 Action。
错误日志之前的行是纯伪代码,显示了我正在努力实现的目标。这能做到吗?
(我在 SO 中看到了一些类似的问题,但在那些情况下,它从来不是必须处理的 ExceptionContext。)
这应该可以完成工作
public override void OnException(ExceptionContext errorContext)
{
string actionName = errorContext.RouteData.Values["action"] as string;
MethodInfo method = errorContext.Controller.GetType().GetMethods()
.FirstOrDefault(x => x.DeclaringType == errorContext.Controller.GetType()
&& x.Name == actionName);
IEnumerable<Attribute> attributes = method.GetCustomAttributes();
//DoStuff
}
我有一个位于控制器顶部的自定义错误属性:
public class JsonExceptionAttribute : HandleErrorAttribute
{
private ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public override void OnException(ExceptionContext errorContext)
{
if (errorContext.ExceptionHandled) return;
if (!errorContext.Action.Attributes.ContainsType(typeof(DontLogPathAttribute)) { // THIS IS PSEUDOCODE
_log.Error($"Oopsie. {HttpContext.Current.Request.Path}");
}
}
}
在我的控制器之上,我只需添加我的属性:
[JsonException]
public class UserController {
public ActionResult JustAnAction{}
[DontLogPath]
public ActionResult SelfService(string myHash, int userId) {}
}
我通常会记录 Api-Call 的路径以防出错。但是有一些我不想那样做的动作。这些案例有 DontLogPathAttribute
(这只是一个空属性 -class)
在 ExceptionHandling (OnException
) 中我想知道这个 Attribute 是否存在。但是在 exceptionContext 中我什至没有找到 属性 来确定当前的 Action。
错误日志之前的行是纯伪代码,显示了我正在努力实现的目标。这能做到吗?
(我在 SO 中看到了一些类似的问题,但在那些情况下,它从来不是必须处理的 ExceptionContext。)
这应该可以完成工作
public override void OnException(ExceptionContext errorContext)
{
string actionName = errorContext.RouteData.Values["action"] as string;
MethodInfo method = errorContext.Controller.GetType().GetMethods()
.FirstOrDefault(x => x.DeclaringType == errorContext.Controller.GetType()
&& x.Name == actionName);
IEnumerable<Attribute> attributes = method.GetCustomAttributes();
//DoStuff
}