Condividi tramite


Metodo IHttpResponse::Redirect

Reindirizza il client a un URL specificato.

Sintassi

virtual HRESULT Redirect(  
   IN PCSTR pszUrl,  
   IN BOOL fResetStatusCode = TRUE,  
   IN BOOL fIncludeParameters = FALSE  
) = 0;  

Parametri

pszUrl
[IN] Puntatore a una stringa contenente l'URL per il reindirizzamento.

fResetStatusCode
[IN] true per impostare il codice di stato HTTP su uno stato 302; false per restituire un messaggio HTML che indica che la pagina è stata spostata.

fIncludeParameters
[IN] true per passare la stringa di query dalla richiesta HTTP originale all'URL reindirizzato; in caso contrario, false.

Valore restituito

Oggetto HRESULT. I valori possibili includono, ma non sono limitati a, quelli indicati nella tabella seguente.

Valore Descrizione
S_OK Indica che l'operazione ha avuto esito positivo.
ERROR_INVALID_PARAMETER Indica che un parametro specificato non è valido.
ERROR_NOT_ENOUGH_MEMORY Indica che la memoria non è sufficiente per eseguire l'operazione.

Commenti

Quando il parametro è true, il RedirectfResetStatusCode metodo reindirizza automaticamente un client a un URL specificato dal pszUrl parametro. Quando fResetStatusCode è false, il Redirect metodo restituisce un messaggio HTML che indica che l'URL è stato spostato nella nuova posizione. Se l'URL specificato dal pszUrl parametro è un percorso relativo, l'URL verrà convertito in un URL assoluto all'interno del dominio di richiesta.

Nota

Se non si restituisce RQ_NOTIFICATION_FINISH_REQUEST dal modulo dopo aver chiamato il metodo, il Redirect metodo non cancella automaticamente il Redirect buffer di risposta. In questa situazione, l'elaborazione successiva può aggiungere informazioni al buffer di risposta e potrebbe ricevere risultati imprevisti se non si cancella manualmente la risposta.

Nota

Il Redirect metodo non scarica l'entità di risposta al client e tutti i dati nella risposta verranno rimossi quando si chiama il Redirect metodo. Se la risposta è già stata scaricata nel client, IIS ha inviato le intestazioni e i dati esistenti al client e il Redirect metodo non reindirizzerà il client al nuovo URL.

Esempio

Nell'esempio di codice seguente viene illustrato come usare il Redirect metodo per creare un modulo HTTP che reindirizza un client a un URL relativo nel server Web.

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

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

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

        // Test for an error.
        if (pHttpResponse != NULL)
        {
            // Set the response header.
            HRESULT hr = pHttpResponse->Redirect("/example/",true,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_BEGIN_REQUEST,
        0
    );
}

Il modulo deve esportare la funzione RegisterModule . È possibile esportare questa funzione creando un file di definizione del modulo (con estensione def) per il progetto oppure è possibile compilare il modulo usando l'opzione /EXPORT:RegisterModule . Per altre informazioni, vedere Procedura dettagliata: Creazione di un modulo HTTP Request-Level tramite codice nativo.

Facoltativamente, è possibile compilare il codice usando la __stdcall (/Gz) convenzione chiamante anziché dichiarare esplicitamente la convenzione chiamante per ogni funzione.

Requisiti

Tipo Descrizione
Client - IIS 7.0 in Windows Vista
- IIS 7.5 in Windows 7
- IIS 8.0 in Windows 8
- IIS 10.0 in Windows 10
Server - IIS 7.0 in Windows Server 2008
- IIS 7.5 in Windows Server 2008 R2
- IIS 8.0 in Windows Server 2012
- IIS 8.5 in Windows Server 2012 R2
- IIS 10.0 in Windows Server 2016
Prodotto - 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
Intestazione Httpserv.h

Vedere anche

Interfaccia IHttpResponse