Изменение результата из ActionExecutedContext внутри OnActionExecuted в ядре web api asp.net - PullRequest
0 голосов
/ 16 января 2019

Я пишу custom filter в моем Web API, и там я хочу изменить результат ActionExecutedContext в методе OnActionExecuted.

Я получил тип результата как OkObjectResult какaction method возвращает IActionResult.

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

Итак, как я могу преобразовать это OkObjectResult в мою модель Object, чтобы я мог использовать properties и манипулировать значениями.

Ценит любое предложение.

1 Ответ

0 голосов
/ 16 января 2019

Свойство OkObjectResult «Value» возвращает объект. Вы можете изменить свойства объекта или даже заменить его новым. Надеюсь, что это работает для вас. Если это так, отметьте это как ответ.

Пример кода :

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 { }
        }
    }
}
...