IHttpResponse::SetErrorDescription (Método)
Especifica la descripción del error personalizado.
Sintaxis
virtual HRESULT SetErrorDescription(
IN PCWSTR pszDescription,
IN DWORD cchDescription,
IN BOOL fHtmlEncode = TRUE
) = 0;
Parámetros
pszDescription
[IN] Puntero a una cadena que contiene la descripción del error personalizada.
cchDescription
[IN] que DWORD
contiene la longitud, en caracteres, de la cadena en pszDescription
.
fHtmlEncode
[IN] true
es si la cadena de pszDescription
se debe codificar para HTML; de lo contrario, false
es .
Valor devuelto
Una clase HRESULT
. Entre los valores posibles se incluyen los que se indican en la tabla siguiente, entre otros.
Value | Descripción |
---|---|
S_OK | Indica que la operación se realizó correctamente. |
ERROR_INVALID_PARAMETER | Indica que se pasó un valor no válido en uno de los parámetros. |
Comentarios
Los desarrolladores usan el SetErrorDescription
método para especificar la descripción del error personalizada. IIS muestra la descripción de error personalizada como parte de la información detallada que se envía a un cliente web cuando IIS devuelve un mensaje de error.
Ejemplo
En el ejemplo de código siguiente se muestra cómo crear un módulo HTTP que realice las siguientes tareas:
Recupera un puntero a una interfaz IHttpResponse mediante el método IHttpContext::GetResponse .
Recupera el código de estado HTTP actual mediante el método IHttpResponse::GetStatus .
Si el código de estado HTTP actual es un error 404.0, recupera la descripción del error personalizada actual mediante el método IHttpResponse::GetErrorDescription .
Si actualmente no se define ninguna descripción de error personalizada, establece la descripción del error personalizada mediante el
SetErrorDescription
método .
#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 );
// Retrieve a a pointer to the current response.
IHttpResponse * pHttpResponse = pHttpContext->GetResponse();
// Test for errors.
if (NULL != pHttpResponse)
{
USHORT uStatusCode = 0;
USHORT uSubStatus = 0;
// Retrieve the current HTTP status code.
pHttpResponse->GetStatus(&uStatusCode,&uSubStatus);
// Process only 404.0 errors.
if (uStatusCode==404 && uSubStatus==0)
{
DWORD cchDescription = 0;
// Retrieve the current error description.
PCWSTR pwszErrorDescription =
pHttpResponse->GetErrorDescription(&cchDescription);
// Process only if no error description is currently defined.
if (cchDescription==0)
{
// Define the new error description.
PCWSTR wszNewDescription =
L"The file that you requested cannot be found.";
// Configure the new error description.
pHttpResponse->SetErrorDescription(
wszNewDescription,wcslen(wszNewDescription),TRUE);
}
}
}
// 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
);
}
El módulo debe exportar la función RegisterModule . Puede exportar esta función mediante la creación de un archivo de definición de módulo (.def) para el proyecto, o bien puede compilar el módulo mediante el /EXPORT:RegisterModule
modificador . Para obtener más información, vea Tutorial: Creación de un módulo HTTP de Request-Level mediante código nativo.
Opcionalmente, puede compilar el código mediante la __stdcall (/Gz)
convención de llamada en lugar de declarar explícitamente la convención de llamada para cada función.
Requisitos
Tipo | Descripción |
---|---|
Remoto | - IIS 7.0 en Windows Vista - IIS 7.5 en Windows 7 - IIS 8.0 en Windows 8 - IIS 10.0 en Windows 10 |
Servidor | - IIS 7.0 en Windows Server 2008 - IIS 7.5 en Windows Server 2008 R2 - IIS 8.0 en Windows Server 2012 - IIS 8.5 en Windows Server 2012 R2 - IIS 10.0 en Windows Server 2016 |
Producto | - 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 |
Encabezado | Httpserv.h |
Consulte también
IHttpResponse (interfaz)
IHttpResponse::GetErrorDescription (Método)