CHttpModule::OnMapPath Method

IIS 7.0
 

Represents the method that will handle a MapPath event, which occurs when an operation requests the physical path to be mapped for the current request.

virtual REQUEST_NOTIFICATION_STATUS OnMapPath(  
   IN IHttpContext* pHttpContext,  
   IN IMapPathProvider* pProvider  
);  

Parameters

pHttpContext
[IN] A pointer to an IHttpContext interface.

pProvider
[IN] A pointer to an IMapPathProvider interface.

A REQUEST_NOTIFICATION_STATUS value.

When a request-level module is registered for the RQ_MAP_PATH notification, IIS will call the module's OnMapPath method when an operation requests the physical path to be mapped for the current request.

System_CAPS_ICON_note.jpg Note

Request-level modules can register for the MapPath event notification by registering for RQ_MAP_PATH in the module's RegisterModule function.

The following code example demonstrates how to create a request-level HTTP module that registers for the RQ_MAP_PATH event notifications. When an operation requests the physical path to be mapped for the current request, IIS will call the example module's OnMapPath method.

//  Insert data from ostringstream into the response
//  On error, Provider error status set here
//  ostringstream  buffer cleared for next call 

HRESULT  WECbyRefChunk( std::ostringstream  &os, IHttpContext *pHttpContext, 
					   IHttpEventProvider *pProvider, LONG InsertPosition= -1)
{
	HRESULT hr = S_OK;

	IHttpTraceContext * pTraceContext = pHttpContext->GetTraceContext();

	hr = pTraceContext->QuickTrace(L"WECbyRefChunk",L"data 2",E_FAIL,6);
	if (FAILED(hr)){
		LOG_ERR_HR(hr,"QuickTrace");
		return hr;
	}
	// create convenience string from ostringstream  
	std::string str(os.str());

	HTTP_DATA_CHUNK dc;
	dc.DataChunkType = HttpDataChunkFromMemory;
	dc.FromMemory.BufferLength = static_cast<DWORD>(str.size());
	dc.FromMemory.pBuffer = pHttpContext->AllocateRequestMemory( 
		static_cast<DWORD>( str.size()+1) );

	if(!dc.FromMemory.pBuffer){
		hr = HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY);
		LOG_ERR_HR(hr,"AllocateRequestMemory");
		pProvider->SetErrorStatus(hr);
		return hr;
	}

	//  use char pointer p for convenience
	char *p = static_cast<char *>(dc.FromMemory.pBuffer);
	strcpy_s(p, str.size()+1, str.c_str());

	hr = pHttpContext->GetResponse()->WriteEntityChunkByReference( 
		&dc, InsertPosition );

	if (FAILED(hr)){
		LOG_ERR_HR(hr,"AllocateRequestMemory");
		pProvider->SetErrorStatus( hr );
	}

	os.str("");                // clear the ostringstream for next call

	return hr;
}  

TypeDescription
Client- IIS 7.0 on Windows Vista
- IIS 7.5 on Windows 7
- IIS 8.0 on Windows 8
- IIS 10.0 on Windows 10
Server- IIS 7.0 on Windows Server 2008
- IIS 7.5 on Windows Server 2008 R2
- IIS 8.0 on Windows Server 2012
- IIS 8.5 on Windows Server 2012 R2
- IIS 10.0 on Windows Server 2016 Technical Preview
Product- 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
HeaderHttpserv.h

CHttpModule Class

Show: