Изменить содержимое HTTP в ActionFilterAttribute

У меня есть действие контроллера, настроенное как:

[HttpPost]
[DecryptBodyFilterAttribute]
public InitializeSessionResponse InitializeSession([FromBody] InitializeSessionRequest request)
{
  ...
}

Тело http представляет собой json и автоматически десериализуется в объект моего запроса. Теперь я хочу, чтобы содержимое http body было зашифрованной строкой, которую я расшифрую в файле ActionFilterAtttribute. Шифрование/дешифрование не проблема. Моя проблема заключается в сбросе значения тела на новое значение, прежде чем перейти к действию в контроллере.

Мой ActionFilterAttribute выглядит следующим образом:

 public sealed class DecryptBodyFilterAttribute : ActionFilterAttribute
 {
    public DecryptBodyFilterAttribute()
    {}

    public override Task OnActionExecutingAsync(HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
    {
        string encryptedString = actionContext.Request.Content.ReadAsStringAsync().Result;
        //... decrypt do whatever and end up with the new content below...

        string newContent = "Something here would be the decrypted json of the initializeSessionRequest";
        //I need to do something like the below
        //actionContext.Request.Content = newContent;

        return base.OnActionExecutingAsync(actionContext, cancellationToken);
    }
 }

Мой вопрос похож на Modify HttpContent (actionExecutedContext.Response.Content) в методе OnActionExecuted WebApi ActionFilterAttribute, однако это решение при приведении response.content (в моем случае запроса) я получаю нулевой объект, поэтому это не работает для меня.


person Animal Style    schedule 26.03.2015    source источник
comment
вы нашли какое-либо решение для вашего вопроса?   -  person User7291    schedule 28.03.2018
comment
@ User7291 Я не думаю, что сделал это, и в итоге сделал это в каждом методе контроллера :(   -  person Animal Style    schedule 28.03.2018