8

एएसपी.नेट कोर 1.0 में प्रत्येक प्रतिक्रिया में हेडर Server: Kestrel शामिल होगा। मैं इस हेडर को अन्य शीर्षलेख के साथ X-Power-By मिडलवेयर का उपयोग करके हटाना चाहता हूं।मिडलवेयर का उपयोग कर सर्वर हेडर को कैसे हटाएं?

मुझे पता है कि हम मेजबान कॉन्फ़िगरेशन में केस्टेल हेडर को निम्न सेट करके हटा सकते हैं, लेकिन मैं इसे मिडलवेयर का उपयोग करके करना चाहता हूं (वास्तव में जब हमारे पास Httpmodule है तो हम ऐसा कर सकते हैं इसलिए मैं एक ही चीज़ सीख रहा हूं)। मैंने अपनी बिट कोशिश की, यह काम नहीं किया।

new WebHostBuilder() 
    .UseKestrel(c => c.AddServerHeader = false) 

की कोशिश की कोड:

public class HeaderRemoverMiddleware 
{ 
    private readonly RequestDelegate _next; 
    public HeaderRemoverMiddleware(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext httpContext) 
    { 
     httpContext.Response.OnStarting(callback: removeHeaders, state: httpContext); 
     await _next.Invoke(httpContext); 
    } 

    private Task removeHeaders(object context) 
    { 
     var httpContext = (HttpContext)context; 
     if (httpContext.Response.Headers.ContainsKey("Server")) 
     { 
      httpContext.Response.Headers.Remove("Server"); 
     } 
     return Task.FromResult(0); 
    } 
} 

public static class HeaderRemoverExtensions 
{ 
    public static IApplicationBuilder UseServerHeaderRemover(this IApplicationBuilder builder) 
    { 
     return builder.UseMiddleware<HeaderRemoverMiddleware>(); 
    } 
} 
+2

बूलियन संपत्ति चाहिए

यहां नमूने मिडलवेयर है कि किसी भी हेडर आप इसे पारित निकाल देंगे है काम। – davidfowl

+0

मुझे पता है कि यह काम करेगा लेकिन मैं इस तरह के सभी शीर्षलेख को एक ही स्थान से हटाना चाहता हूं। – dotnetstep

+0

नया वेबहोस्टबिल्डर()। UseKestrel (c => c.AddServerHeader = false) मेरे लिए काम किया! –

उत्तर

8

मैं प्रमाणित कर चुके हैं कि इस कोड का छोटा बाज 1.0.0 के रूप में काम कर रहा है:

.UseKestrel(opt => opt.AddServerHeader = false) 

यह प्रतिक्रिया से Server: Kestrel हैडर निकाल देता है।


यदि आप प्रतिक्रिया से अन्य मनमानी शीर्षलेखों को हटाना चाहते हैं, तो आपके कोड की एक भिन्नता काम करेगी। यह Server: Kestrel हेडर के लिए काम नहीं करता है, क्योंकि ऐसा लगता है कि केस्ट्रेल 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"); 
संबंधित मुद्दे