В моем приложении OWIN я регистрирую промежуточное программное обеспечение, чтобы перехватить результат других промежуточных продуктов в конвейере, и если условие выполнено, мне нужно полностью изменить ответ от того, что он есть (может быть 302
или 200
) до 403
(запрещено).Перепишите ответ в промежуточном программном обеспечении Owin
Существует, конечно, не очень чистый способ, а именно, чтобы вручную очистить все заголовки, тип контента и т. Д. И установить statusCode в 403
, но это кажется неправильным.
public override async Task Invoke(IOwinContext context)
{
await this.Next.Invoke(context);
if (someCondition(context))
{
var headers = context.Response.Headers;
headers.Keys.ForEach(k => headers.Remove(k));
context.Response.StatusCode = 403;
context.Response.ContentType = string.Empty;
context.Response.ContentLength = null;
await context.Response.WriteAsync(string.Empty);
}
}
Плюс тот факт, что этот подход не работает, когда перезапись 200
ответа (когда она попадет на линию, где мы устанавливаем StatusCode
, он выскакивает и промывает ответ).
Я новичок в OWIN, и я могу не понимать, как это работает.
Есть ли другой способ, которым вы это сделаете?
но 'somecondition' зависит от того, что' Next.Invoke' сделал в 'context' –