在 web api asp.net 核心中修改 OnActionExecuted 中 ActionExecutedContext 的结果

Modifying the result from ActionExecutedContext inside OnActionExecuted in web api asp.net core

我正在 Web API 中写 custom filter 并且我想在 OnActionExecuted 方法中修改 ActionExecutedContext 的结果。

我得到的结果类型为 OkObjectResult,因为 action method 返回 IActionResult

public void OnActionExecuted(ActionExecutedContext context)
{        
    var myResult = context.Result; 
    //Type of myResult is OkObjectResult          
}

那么我如何将这个 OkObjectResult 转换为我的模型 Object,这样我就可以使用 properties 并操纵这些值。

感谢任何建议。

OkObjectResult 的“值”属性 returns 对象。您可以修改对象的属性,甚至可以用新属性替换它。希望这对你有用。如果是,请将此标记为答案。

示例代码:

public class Student
{
  public string Name { get; set; }
}

 [ApiController]
    public class TestController : ControllerBase
    {
        [HttpGet, Route("api/Test/GetString")]
        [SampleActionFilter]
        public ActionResult<Student> GetString(string name)
        {
            if(name.StartsWith("s"))
            {
                return Ok(new Student{ Name = $"This is data {name}" });
            }
            else
            {
                return Ok(new Student { Name = $"No Name" });
            }
        }
    }

 public class SampleActionFilterAttribute : TypeFilterAttribute
    {
        public SampleActionFilterAttribute() : 
        base(typeof(SampleActionFilterImpl))
        {
        }

    private class SampleActionFilterImpl : IActionFilter
    {
        public void OnActionExecuting(ActionExecutingContext context)
        {
        
            // perform some business logic work

        }

        public void OnActionExecuted(ActionExecutedContext context)
        {
            // perform some business logic work
            var myResult = (OkObjectResult)context.Result;

            //Add type checking here... sample code only
            //Modiy object values
            try
            {
                Student myVal = (Student)myResult.Value;
                myVal.Name = "Johnny";
            }
            catch { }
        }
    }
}