Ответ 1
Я проверил, что этот код работает с Kestrel 1.0.0:
.UseKestrel(opt => opt.AddServerHeader = false)
Это удаляет заголовок Server: Kestrel
из ответа.
Если вы хотите удалить другие произвольные заголовки из ответа, вариант вашего кода будет работать. Это не работает для заголовка Server: Kestrel
, поскольку кажется, что Kestrel добавляет его после OnSending
делегата OnSending
.
Вот пример промежуточного программного обеспечения, которое удалит все заголовки, которые вы передаете ему:
public class HeaderRemoverMiddleware
{
private readonly RequestDelegate _next;
private readonly ImmutableList<string> _headersToRemove;
public HeaderRemoverMiddleware(RequestDelegate next, ImmutableList<string> headersToRemove)
{
_next = next;
_headersToRemove = headersToRemove;
}
public async Task Invoke(HttpContext httpContext)
{
httpContext.Response.OnStarting(() =>
{
_headersToRemove.ForEach(header =>
{
if (httpContext.Response.Headers.ContainsKey(header))
{
httpContext.Response.Headers.Remove(header);
}
});
return Task.FromResult(0);
});
await _next.Invoke(httpContext);
}
}
public static class HeaderRemoverExtensions
{
public static IApplicationBuilder UseHeaderRemover(this IApplicationBuilder builder, params string[] headersToRemove)
{
return builder.UseMiddleware<HeaderRemoverMiddleware>(headersToRemove.ToImmutableList());
}
}
Чтобы использовать его, добавьте его в самый верх вашего конвейера приложения:
app.UseHeaderRemover("Content-Type", "AnotherHeader");