Перезаписать тело ответа в промежуточном программном обеспечении OwinC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Перезаписать тело ответа в промежуточном программном обеспечении Owin

Сообщение Anonymous »

У меня есть класс промежуточного программного обеспечения Owin, который я использую. Цель состоит в том, чтобы перезаписать тело ответа при обнаружении кода состояния HTTP 401, 403 или 405 и заменить тело объектом JSON. На данный момент это мой метод:

Код: Выделить всё

public override async Task Invoke(IOwinContext context)
{
await Next.Invoke(context);

if (context.Response.StatusCode == 401 || context.Response.StatusCode == 403 || context.Response.StatusCode == 405)
{

var owinResponse = context.Response;
var owinResponseStream = owinResponse.Body;
var responseBuffer = new MemoryStream();
owinResponse.Body = responseBuffer;

string message;

switch (context.Response.StatusCode)
{
case 401:
message = "unauthorized request";
break;
case 403:
message = "forbidden request";
break;
default:
message = "request not allowed";
break;
}
var newResponse = new ResponseMessage
{
IsError = true,
StatusCode = (HttpStatusCode) Enum.Parse(typeof(HttpStatusCode), context.Response.StatusCode.ToString()),
Data = null,
Message = message
};

var customResponseBody = new StringContent(JsonConvert.SerializeObject(newResponse));
var customResponseStream = await customResponseBody.ReadAsStreamAsync();
await customResponseStream.CopyToAsync(owinResponseStream);
owinResponse.ContentType = "application/json";
owinResponse.ContentLength = customResponseStream.Length;
owinResponse.StatusCode = 200;
owinResponse.Body = owinResponseStream;
}

}
По большей части это работает, однако тело ответа добавляется, а не заменяется. Например, в случае ошибки 401 тело ответа имеет следующий вид:

Код: Выделить всё

{"message":"Authorization has been denied for this request."}
{"IsError":true,"StatusCode":401,"Data":null,"Message":"unauthorized request"}
вместо:

Код: Выделить всё

{"IsError":true,"StatusCode":401,"Data":null,"Message":"unauthorized request"}
Я уверен, что это как-то связано с тем, как я пишу в тело ответа, но пока ничто не решило проблему.
Будем очень признательны за любые предложения.

Спасибо

Подробнее здесь: https://stackoverflow.com/questions/558 ... middleware
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»