Промежуточное ПО OWIN - код состояния HTTP ответа не устанавливается при добавлении заголовка Content-Length - PullRequest
0 голосов
/ 26 марта 2019

Я использую WebAPI только с одним промежуточным программным обеспечением и НЕ могу установить ответный код состояния HTTP при добавлении заголовка Content-Length.Код состояния по умолчанию 200 OK с заголовком Content-Length (независимо от длины, ноль или не ноль).Если я не добавляю заголовок Content-Length, настройка кода состояния работает нормально.

Я использую OnSendingHeaders () и могу добавить заголовки в ответ и задать тело ответа, но настройка статуса не работает.

Почему заголовок Content-Length влияет на код состояния?Спасибо!

Я разместил этот вопрос в качестве продолжения в другой теме ( Промежуточное ПО OWIN не может установить код состояния http ), которое я создал.Создание этой новой темы для видимости.

public class Startup
{
    public void Configuration(IAppBuilder appBuilder)
    {
        appBuilder.Use(typeof(SampleMiddleware));
    }
}

public class SampleMiddleware : OwinMiddleware
{
    private string _responseBody = null;

    public SampleMiddleware(OwinMiddleware next) : base(next)
    {
    }

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

        context.Response.OnSendingHeaders(state =>
        {
            var cntxt = (IOwinContext)state;
            SetResponseMessage(cntxt);
        }, context);
    }

    private void SetResponseMessage(IOwinContext context)
    {
        //Setting status code
        context.Response.StatusCode = 201;

        //Setting headers
        context.Response.Headers.Add("XYZ", new[] { "Value-1" });
        context.Response.Headers.Add("ABC", new[] { "Value-2" });

        //Status code is not getting set and default to 200 OK when I add Content-Length header
        //Without Content-Length header, setting response http status code works
        context.Response.Headers.Add("Content-Length", new[] { string.Format("{0}", _responseBody.Length) });

        //Setting response body
        context.Response.Write(_responseBody);
    }

    private async Task ProcessIncomingRequest()
    {
        // Process request
        //await ProcessingFunc();

        // Set response body
        _responseBody = "Response body based on above processing";
    }
}
...