Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menunjukkan bahwa handler untuk permintaan saat ini telah selesai.
Sintaks
virtual VOID SetRequestHandled(
VOID
) = 0;
Parameter
Metode ini tidak memerlukan parameter.
Tampilkan Nilai
VOID.
Keterangan
Metode SetRequestHandled menentukan bahwa handler untuk permintaan saat ini telah selesai diproses. Misalnya, jika beberapa penangan permintaan dikonfigurasi untuk jenis file tertentu, Anda dapat menggunakan SetRequestHandled metode untuk menunjukkan bahwa pemrosesan telah selesai untuk permintaan saat ini dan bahwa handler tambahan tidak boleh dijalankan.
Contoh
Contoh kode berikut menunjukkan cara membuat modul HTTP yang melakukan tugas berikut:
Modul mendaftar untuk pemberitahuan RQ_PRE_EXECUTE_REQUEST_HANDLER .
Modul membuat kelas CHttpModule yang berisi metode OnPreExecuteRequestHandler .
Saat klien Web meminta URL, IIS memanggil metode modul
OnPreExecuteRequestHandler. Metode ini melakukan tugas-tugas berikutMengambil pointer ke antarmuka IScriptMapInfo .
Mengambil handler skrip untuk permintaan dengan menggunakan metode IScriptMapInfo::GetScriptProcessor .
Jika permintaan adalah untuk halaman ASP, mengembalikan pesan ke klien Web bahwa permintaan telah ditangani, lalu memanggil
SetRequestHandledmetode untuk mengatur permintaan sebagai ditangani.
Modul menghapus
CHttpModulekelas dari memori lalu keluar.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnPreExecuteRequestHandler(
IN IHttpContext* pHttpContext,
IN IHttpEventProvider* pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Retrieve an IScriptMapInfo interface.
IScriptMapInfo * pScriptMapInfo = pHttpContext->GetScriptMap();
// Test for an error.
if (NULL != pScriptMapInfo)
{
// Create buffers to store the script processor path.
PCWSTR pwszScriptProcessor;
DWORD cchScriptProcessor = 0;
// Retrieve the script processor.
pwszScriptProcessor =
pScriptMapInfo->GetScriptProcessor(&cchScriptProcessor);
// Test for an error.
if ((pwszScriptProcessor != NULL) && (cchScriptProcessor > 0))
{
// Test for an ASP request.
if (NULL != wcsstr(pwszScriptProcessor,L"\\asp.dll"))
{
// Clear the existing response.
pHttpContext->GetResponse()->Clear();
// Set the MIME type to plain text.
pHttpContext->GetResponse()->SetHeader(
HttpHeaderContentType,"text/plain",
(USHORT)strlen("text/plain"),TRUE);
// Return a status message.
WriteResponseMessage(pHttpContext,
"ASP requests have been handled.");
// Indicate that handlers for this request have completed.
pHttpContext->SetRequestHandled();
}
}
}
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
private:
// Create a utility method that inserts a string value into the response.
HRESULT WriteResponseMessage(
IHttpContext * pHttpContext,
PCSTR pszBuffer
)
{
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Create a data chunk. (Defined in the Http.h file.)
HTTP_DATA_CHUNK dataChunk;
// Set the chunk to a chunk in memory.
dataChunk.DataChunkType = HttpDataChunkFromMemory;
// Buffer for bytes written of data chunk.
DWORD cbSent;
// Set the chunk to the buffer.
dataChunk.FromMemory.pBuffer =
(PVOID) pszBuffer;
// Set the chunk size to the buffer size.
dataChunk.FromMemory.BufferLength =
(USHORT) strlen(pszBuffer);
// Insert the data chunk into the response.
hr = pHttpContext->GetResponse()->WriteEntityChunks(
&dataChunk,1,FALSE,TRUE,&cbSent);
// Test for an error.
if (FAILED(hr))
{
// Return the error status.
return hr;
}
// Return a success status.
return S_OK;
}
};
// 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 we 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_PRE_EXECUTE_REQUEST_HANDLER,
0
);
}
Modul Anda harus mengekspor fungsi RegisterModule . Anda dapat mengekspor fungsi ini dengan membuat file definisi modul (.def) untuk proyek Anda, atau Anda dapat mengkompilasi modul dengan menggunakan sakelar /EXPORT:RegisterModule . Untuk informasi selengkapnya, lihat Panduan: Membuat Modul HTTP Request-Level Dengan Menggunakan Kode Asli.
Anda dapat mengkompilasi kode dengan menggunakan __stdcall (/Gz) konvensi panggilan alih-alih secara eksplisit mendeklarasikan konvensi panggilan untuk setiap fungsi.
Persyaratan
| Jenis | Deskripsi |
|---|---|
| Klien | - IIS 7.0 di Windows Vista - IIS 7.5 di Windows 7 - IIS 8.0 di Windows 8 - IIS 10.0 pada Windows 10 |
| Server | - IIS 7.0 di Windows Server 2008 - IIS 7.5 di Windows Server 2008 R2 - IIS 8.0 di Windows Server 2012 - IIS 8.5 di Windows Server 2012 R2 - IIS 10.0 di Windows Server 2016 |
| Produk | - 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 |