Я использую 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";
}
}