如何操纵头,然后用它继续在C#?
-
21-09-2019 - |
题
点击我要替换IIS6上运行旧的ISAPI筛选器。该过滤器将检查该请求是否是一个特殊的种,然后操纵所述报头和与该请求继续进行。两个标题在我需要调用另一个特殊的ISAPI模块进行操作的方法添加。 结果,所以,我有ISAPI C ++等的代码:
DWORD OnPreProc(HTTP_FILTER_CONTEXT *pfc, HTTP_FILTER_PREPROC_HEADERS *pHeaders)
{
if (ManipulateHeaderInSomeWay(pfc, pHeaders))
{
return SF_STATUS_REQ_NEXT_NOTIFICATION;
}
return SF_STATUS_REQ_FINISHED;
}
我现在要重写此ISAPI滤波器作为一个IIS7管理模块。所以,我有这样的事情:
private void OnMapRequestHandler(HttpContext context)
{
ManipulateHeaderInSomeWay(context);
}
和现在怎么办?请求似乎没有做它应注意什么? 结果我已经写了实现相同方法的IIS7本机模块。但是这种方法有一个返回值与能告诉我下一步做什么:
REQUEST_NOTIFICATION_STATUS CMyModule::OnMapRequestHandler(IN IHttpContext *pHttpContext, OUT IMapHandlerProvider *pProvider)
{
if (DoSomething(pHttpContext))
{
return RQ_NOTIFICATION_CONTINUE;
}
return RQ_NOTIFICATION_FINISH_REQUEST;
}
那么,有没有办法再次发送我的操作方面?
解决方案
我终于找到了。正如我在评论中说我添加两个标头是由我的DLL,它最终处理请求所需的请求。该url
头包含路径DLL。所以,我必须做一个重定向到该DLL。
结果,这是通过下面的代码来完成:
private void OnMapRequestHandler(HttpContext context)
{
ManipulateHeaderInSomeWay(context);
string url = context.Request.Header["url"]; // path of the DLL
// now this is the important call!
context.Server.TransferRequest(url, true);
}
不隶属于 StackOverflow