Как получить мой напечатанный результат в пользовательском атрибуте фильтра?

Это мой код:

// Controller

[HttpGet("{id}")]
[MyFilter]
public async Task<MyCustomType> Load(string id)
{
    return new MyCustomType(....);
}

// Custom attribute

public class MyFilterAttribute : ActionFilterAttribute
{
    public override void OnResultExecuting(ResultExecutingContext context)
    {
        // Can I have my MyCustomType result here?
    }
}

Мне нужно реализовать некоторую специальную логику в случае конкретных значений свойств результата MyCustomType.

1 ответ

Public class MyCustomType
{
     // assuming that there will be more properties 
     public int Id { get; set; }
     public string Name { get; set; }
}

// Now, Move to Controller method.

public class CustomController : Controller 
{
    [HttpGet({"id"})]
    [MyFilter]
    public async Task<MyCustomType> Load(string id)
    {

       // Do some async operations 
       // Or do some Db queries 
       // returning MyCustomType
       MyCustomType typeToReturn = new MyCustomType();
       typeToReturn.Id = 1;
       typeToReturn.Name = "something";

       return typeToReturn;
    }
} 

 // Well here goes the attribute

public class MyFilterAttribute : ActionFilterAttribute
{
     public override void OnResultExecuting(ResultExecutingContext context)
     {
          // you have to do more digging i am using dynamic to get the values and result.
          dynamic content = context.Result;
          if (content != null)
          {
              dynamic values = content.Value;
          }

     }

}

EDIT изменил код и запустил его в основном проекте dot net, и я смог получить значения, как бы я ни использовал dynamic Вы можете больше на этом копать.

Другие вопросы по тегам