Это потому, что содержимое может быть прочитано из запроса только один раз, так как запрос является потоком только для пересылки.Вы читаете его в атрибуте, а затем привязка модели пытается прочитать его снова, но не может.
Эта хакерская статья может помочь вам понять
Если честновам может быть лучше использовать заголовок Authorization для вставки хэша, это ведь то, для чего он предназначен.Я делал это в прошлом, используя HMAC ( ознакомьтесь с этой статьей ).Чтение заголовка Authorization в Атрибуте может быть сделано следующим образом:
class CustomAuthorizeAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext context)
{
var authhash = context.Request.Headers.Authorization.Parameter;
}
}
Также для вашей информации есть асинхронная версия метода OnAuthorization, которую вы должны использовать вместо добавления .Result
в концеасинхронного вызова, поэтому ваш оригинальный код будет выглядеть так:
class CustomAuthorizeAttribute : AuthorizationFilterAttribute
{
public override async Task OnAuthorizationAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
var content = await actionContext.Request.Content.ReadAsFormDataAsync(cancellationToken);
}
}