web-dev-qa-db-ja.com

Web API応答からヘッダーを削除するにはどうすればよいですか?

新しいWebAPI 2.0プロジェクト。これにより、要求/応答パイプライン全体を完全に制御できます。

ASP.NET Web API応答によって送信された応答から「X-」ヘッダーを削除するにはどうすればよいですか?具体的には、現時点では常に変更される可能性があるため、「_X-AspNet-Version_」、「_X-Powered-By_」、「_X-SourceFiles_」を削除します。

コントローラからHttpResponseMessageを返す前に、result.Headers.Remove("X-AspNet-Version");を試しました。ヘッダーはまだFiddlerに表示されていたため、これは機能しませんでした。また、HttpResponseMessageオブジェクトのどこにもヘッダーが見つかりませんでした。私にとって、これはパイプラインをさらに深く掘り下げる必要があるかもしれないことを示していましたが、どこから始めればよいのか、それが正しいのかわかりません。

11
DenaliHardtail

解決策-1

から this 回答

「poweredby」はIISのカスタムヘッダーです。変更は、使用しているIIS)のバージョンによって異なります。変更または削除する方法については、 ここ を参照してください。

Global.asaxのApplicationStartイベントでMVCヘッダーを削除するには:

_MvcHandler.DisableMvcResponseHeader = true;
_

これをweb.configに入れて、X-AspNet-Versionヘッダーを削除します。

_<system.web>
    <httpRuntime enableVersionHeader="false" />
</system.web>
_

解決策-2

Application_EndRequest()で任意のヘッダーまたは何かを変更できますこれを試してください

_protected void Application_EndRequest()
{
    // removing excessive headers. They don't need to see this.
    Response.Headers.Remove("header_name");
}
_
4
Emdadul Sawon

私が実装した代替ソリューションは、独自のHttpモジュールを定義し、OnPreSendRequestHeadersハンドラーのヘッダーを削除することです。これにより、すべてのASP.NETおよびWeb APIリクエスト、および静的コンテンツリクエストからヘッダーが削除されます。また、複数のプロジェクトで再利用できます。

public class RemoveHttpHeadersModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        Guard.ArgumentNotNull(context, "context");

        context.PreSendRequestHeaders += OnPreSendRequestHeaders;
    }

    public void Dispose() { }

    void OnPreSendRequestHeaders(object sender, EventArgs e)
    {
        var application = sender as HttpApplication;

        if (application != null)
        {
            HttpResponse response = application.Response;
            response.Headers.Remove("Server");
            response.Headers.Remove("X-Powered-By");
        }
    }
}
3
Tushar Kesare

Owinを使用している場合は、これをスタートアップクラスに追加して、「Server」ヘッダーを削除できます。

        app.Use((context, next) =>
        {
            context.Response.Headers.Remove("Server");
            return next.Invoke();
        });
        app.UseStageMarker(PipelineStage.PostAcquireState);
2
Ger Groot

Slippery Peteが指摘しているように、この質問は ASP.Net MVCのデフォルトのHTTPヘッダーを削除する方法は? で回答されています。

別の解決策は、ここに示すようにEndRequestシグナルでリクエストを変更することです http://tech.trailmax.info/2013/02/remove-server-http-header-from-asp-net-mvc-application /

1
Joona Romppanen