У меня есть действие контроллера, настроенное как:
[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 (в моем случае запроса) я получаю нулевой объект, поэтому это не работает для меня.