C# 什么是OData控制器生命周期事件OneExecuting/OneExecuted?

C# 什么是OData控制器生命周期事件OneExecuting/OneExecuted?,c#,asp.net-core,odata,C#,Asp.net Core,Odata,为了进行诊断,在OData控制器中,要覆盖这两个事件的等效操作是什么: [Route("api/[controller]")] [ApiController] public class FooController : ODataController { [SampleActionFilter] [HttpGet("SomeResource")] public IActionResult SomeResource() { return Content

为了进行诊断,在OData控制器中,要覆盖这两个事件的等效操作是什么:

[Route("api/[controller]")]
[ApiController]
public class FooController : ODataController
{
    [SampleActionFilter]
    [HttpGet("SomeResource")]
    public IActionResult SomeResource()
    {
        return Content("Successful access to resource - header should be set.");
    }
}
  • 在操作开始执行之前
  • 关于执行的行动
  • 我只能找到一个:

    public class BaseODataController : ODataController
    {
        public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
        {
            return base.ExecuteAsync(controllerContext, cancellationToken);
        }
    }
    
    公共类BaseODataController:ODataController
    {
    公共覆盖任务ExecuteAsync(HttpControllerContext controllerContext,CancellationToken CancellationToken)
    {
    返回base.ExecuteAsync(controllerContext,cancellationToken);
    }
    }
    


    最重要的是,一旦我们从操作返回控件,就会应用查询筛选器,在该生命周期事件中,我们可以测量诊断:例如,方法执行所用的时间。

    首先,您需要定义一个筛选器:

    public class SampleActionFilter : Attribute, IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
            // do something before the action executes
        }
    
        public void OnActionExecuted(ActionExecutedContext context)
        {
            // do something after the action executes
        }
    }
    
    然后在控制器中为操作应用属性:

    [Route("api/[controller]")]
    [ApiController]
    public class FooController : ODataController
    {
        [SampleActionFilter]
        [HttpGet("SomeResource")]
        public IActionResult SomeResource()
        {
            return Content("Successful access to resource - header should be set.");
        }
    }
    
    您可以检查此链接:


    让我知道是否有用。

    你检查过这个吗?你可以使用一个动作过滤器:)你的答案是正确的,为了他人的利益,只需稍加调整,而不是只使用过滤器,使用
    EnableQueryAttributeFilter