ActionFilterAttribute:何时使用OnActionExecuting与OnActionExecutingAsync?

Jer*_*acs 9 c# async-await asp.net-web-api

我创建了一个LoggedAttribute继承自System.Web.Http.Filters.ActionFilterAttribute并登录OnActionExecutingOnActionExecutingAsync方法的类; 我假设有一个用于异步调用,一个用于非异步调用,但似乎两者都在使用.那么我应该登录哪一个?

UPDATE

代码如下:

public sealed class LoggedAttribute : ActionFilterAttribute
{
    private readonly ILog _logger;

    public LoggedAttribute(ILogManager logManager)
    {
        _logger = logManager.GetLogger<LoggedAttribute>();
    }

    public LoggedAttribute() : this(new LogManager()) {}

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        //logging logic goes here
        base.OnActionExecuting(actionContext);
    }

    public override async Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
    {
        //logging logic goes here
        await base.OnActionExecutingAsync(actionContext, cancellationToken);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我将[Logged]属性应用到我的基本ApiController,我得到单个调用的重复日志条目.

A77*_*A77 11

答复没有回答我的想法,

如果您需要在执行操作之前运行代码,则使用两者.

如果你想要它同步运行同时使用OnActionExecuting,否则使用OnActionExecutingAsync(ei异步).


Jer*_*acs 5

好吧,看起来每次请求都会调用OnActionExecuting.我把我的逻辑专门用在那个方法中,它似乎按照需要工作.