Freigeben über


IHttpResponse::SetHeader-Methode

Legt den Wert eines angegebenen HTTP-Antwortheaders fest oder fügt den Wert an.

Syntax

virtual HRESULT SetHeader(  
   IN PCSTR pszHeaderName,  
   IN PCSTR pszHeaderValue,  
   IN USHORT cchHeaderValue,  
   IN BOOL fReplace  
) = 0;  
  
virtual HRESULT SetHeader(  
   IN HTTP_HEADER_ID ulHeaderIndex,  
   IN PCSTR pszHeaderValue,  
   IN USHORT cchHeaderValue,  
   IN BOOL fReplace  
) = 0;  

Parameter

pszHeaderName
[IN] Ein Zeiger auf eine Zeichenfolge, die den Namen des festzulegenden HTTP-Headers enthält.

ulHeaderIndex
[IN] Die ID eines festzulegenden HTTP-Headers.

pszHeaderValue
[IN] Ein Zeiger auf eine Zeichenfolge, die den Wert des festzulegenden Headers enthält.

cchHeaderValue
[IN] Die Länge des Headerwerts in Zeichen, ohne das Zeichen \0.

fReplace
[IN] Gibt an, ob der vorhandene Header überschrieben werden soll.

Rückgabewert

HRESULT. Mögliches Werte (aber nicht die Einzigen) sind die in der folgenden Tabelle.

Wert BESCHREIBUNG
S_OK Gibt an, dass der Vorgang erfolgreich war.
ERROR_INVALID_DATA Gibt an, dass die Daten ungültig sind (z. B. sind die Daten im Header zu lang).
ERROR_INVALID_PARAMETER Gibt an, dass der angegebene Parameter ungültig ist (z. B. ist der Parameter auf NULL festgelegt).
ERROR_NOT_ENOUGH_MEMORY Gibt an, dass nicht genügend Arbeitsspeicher zum Ausführen des Vorgangs vorhanden ist.

Bemerkungen

Die SetHeader -Methode legt den Wert eines HTTP-Headers für die aktuelle Antwort fest. Es gibt zwei überladene Versionen der SetHeader -Methode. Mit der ersten können Sie den Header mithilfe einer Zeichenfolge angeben, die pszHeaderName im Parameter enthalten ist. Die andere Überladung verwendet eine ganze Zahl ohne Vorzeichen, die ulHeaderIndex im -Parameter enthalten ist.

Hinweis

Sie sollten nicht die Überladung verwenden, die den ulHeaderIndex -Parameter verwendet, um den Wert des Server Headers festzulegen, da ihr Wert an den vorhandenen Headerwert angefügt wird. Verwenden Sie stattdessen den pszHeaderName -Parameter.

Der durch den Parameter angegebene Headername kann ein benutzerdefinierter Header oder ein Header sein, der pszHeaderName in Request for Comments (RFC) 1945, "Hypertext Transfer Protocol -- HTTP/1.0" oder RFC 2616, "Hypertext Transfer Protocol -- HTTP/1.1" definiert ist.

Hinweis

Der pszHeaderName Parameter darf nicht NULL sein.

Der ulHeaderIndex Parameter gibt die ID eines HTTP-Headers an, der in der HTTP_HEADER_ID Enumeration aufgeführt ist.

Hinweis

Die HTTP_HEADER_ID Enumeration ist in der Http.h-Headerdatei definiert.

Wenn der fReplace Parameter ist, ersetzt der angegebene Headerwert den vorhandenen Headerwert, wenn der Header vorhanden ist true. Wenn fReplace ist false, sollte der angegebene Headerwert an den vorhandenen Header angefügt und durch ein Komma vom Header selbst getrennt werden.

Hinweis

Andere Module oder Handler können die SetHeader -Methode aufrufen, um Ihren Wert zu ersetzen, oder Werte an den angegebenen Wert anfügen.

Beispiel

Im folgenden Codebeispiel wird veranschaulicht, wie beide Überladungen der SetHeader -Methode verwendet werden, um http Content-Type und Server Header durch benutzerdefinierte Werte zu ersetzen und den HTTP-Header Refresh auf eine bestimmte Anzahl von Sekunden festzulegen.

#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>

// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
    REQUEST_NOTIFICATION_STATUS
    OnSendResponse(
        IN IHttpContext * pHttpContext,
        IN ISendResponseProvider * pProvider
    )
    {
        UNREFERENCED_PARAMETER( pProvider );

        // Create an HRESULT to receive return values from methods.
        HRESULT hr;
        
        // Set the "Refresh" header name.
        char szRefreshName[] = "Refresh";
        // Set the "Refresh" header value.
        char szRefreshValue[] = "30";
        // Set the "Content-Type" header value.
        char szContentType[] = "text/plain";
        // Set the "Server" header value.
        char szServerValue[] = "MyServer/7.0";

        // Retrieve a pointer to the response.
        IHttpResponse * pHttpResponse = pHttpContext->GetResponse();

        // Test for an error.
        if (pHttpResponse != NULL)
        {

            // Set the "Refresh" header.
            hr = pHttpResponse->SetHeader(
                szRefreshName,szRefreshValue,
                (USHORT)strlen(szRefreshValue),FALSE);

            // Test for an error.
            if (FAILED(hr))
            {
                // Set the error status.
                pProvider->SetErrorStatus( hr );
                // End additional processing.
                return RQ_NOTIFICATION_FINISH_REQUEST;
            }

            // Set the "Content-Type" header.
            hr = pHttpResponse->SetHeader(
                HttpHeaderContentType,szContentType,
                (USHORT)strlen(szContentType),TRUE);

            // Test for an error.
            if (FAILED(hr))
            {
                // Set the error status.
                pProvider->SetErrorStatus( hr );
                // End additional processing.
                return RQ_NOTIFICATION_FINISH_REQUEST;
            }

            // Set the "Server" header.
            hr = pHttpResponse->SetHeader(
                "Server",szServerValue,
                (USHORT)strlen(szServerValue),TRUE);

            // Test for an error.
            if (FAILED(hr))
            {
                // Set the error status.
                pProvider->SetErrorStatus( hr );
                // End additional processing.
                return RQ_NOTIFICATION_FINISH_REQUEST;
            }
        }
            
        // Return processing to the pipeline.
        return RQ_NOTIFICATION_CONTINUE;
    }
};

// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
    HRESULT
    GetHttpModule(
        OUT CHttpModule ** ppModule, 
        IN IModuleAllocator * pAllocator
    )
    {
        UNREFERENCED_PARAMETER( pAllocator );

        // Create a new instance.
        MyHttpModule * pModule = new MyHttpModule;

        // Test for an error.
        if (!pModule)
        {
            // Return an error if the factory cannot create the instance.
            return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
        }
        else
        {
            // Return a pointer to the module.
            *ppModule = pModule;
            pModule = NULL;
            // Return a success status.
            return S_OK;
        }            
    }

    void Terminate()
    {
        // Remove the class from memory.
        delete this;
    }
};

// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
    DWORD dwServerVersion,
    IHttpModuleRegistrationInfo * pModuleInfo,
    IHttpServer * pGlobalInfo
)
{
    UNREFERENCED_PARAMETER( dwServerVersion );
    UNREFERENCED_PARAMETER( pGlobalInfo );

    // Set the request notifications and exit.
    return pModuleInfo->SetRequestNotifications(
        new MyHttpModuleFactory,
        RQ_SEND_RESPONSE,
        0
    );
}

Ihr Modul muss die RegisterModule-Funktion exportieren. Sie können diese Funktion exportieren, indem Sie eine Moduldefinitionsdatei (.def) für Ihr Projekt erstellen, oder Sie können das Modul mithilfe des Schalters /EXPORT:RegisterModule kompilieren. Weitere Informationen finden Sie unter Exemplarische Vorgehensweise: Erstellen eines Request-Level HTTP-Moduls mithilfe von nativem Code.

Sie können den Code optional kompilieren, indem Sie die __stdcall (/Gz) Aufrufkonvention verwenden, anstatt die Aufrufkonvention für jede Funktion explizit zu deklarieren.

Anforderungen

type BESCHREIBUNG
Client – IIS 7.0 unter Windows Vista
– IIS 7.5 unter Windows 7
– IIS 8.0 unter Windows 8
– IIS 10.0 unter Windows 10
Server – IIS 7.0 unter Windows Server 2008
– IIS 7.5 unter Windows Server 2008 R2
– IIS 8.0 unter Windows Server 2012
– IIS 8.5 unter Windows Server 2012 R2
– IIS 10.0 unter Windows Server 2016
Produkt – IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0
- IIS Express 7.5, IIS Express 8.0, IIS Express 10.0
Header Httpserv.h

Weitere Informationen

IHttpResponse-Schnittstelle
IHttpResponse::D eleteHeader-Methode
IHttpResponse::GetHeader-Methode