0

一些背景信息:我根据Mike Volodarsky 的这篇博客条目,使用 .NET Framework 为 IIS7 创建了一个自定义处理程序和一个自定义模块。

到目前为止,处理程序和模块一切正常,但这是我的问题/场景。

如果处理程序识别给定 URL 上的请求,我需要读取 cookie,获取其信息并将这些数据添加到传入请求的标头中。

到目前为止,这是我为“IHttpHandler”成员编写的代码:

public void ProcessRequest(HttpContext context)
{
    var response = context.Response; 
    //var request = context.Request;
    var cookieInformation = GetSomeInformationFromCookie();
    if (!string.IsNullOrEmpty(cookieInformation))
    {
        var nameValueCollection = new NameValueCollection
                                         {{"CustomAspNetHeader", cookieInformation}};
        response.Headers.Add(nameValueCollection);
    }
    // I would like to proceed the current request 
    // just with the updated header-information.
}

是否有任何可能的方法来更新传入请求的标头信息?

让我们想象一下我们有一个名为“<strong>MyPage.aspx”的页面。在PageLoad-Event中,我们编写如下内容:

foreach (var header in HttpContext.Current.Request.Headers)
{
    var value = HttpContext.Current.Request.Headers[header.ToString()];
    var s = string.Format("Header: <strong>{0}</strong>, Value: <strong>{1}</strong><br />", header, value);
    Response.Write(s);
}

基本上我从 foreach 循环中得到以下信息:

  • 标头:连接,值:保持活动
  • 标头:接受,值:text/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8
  • 标头:Accept-Encoding,值:gzip、deflate、sdch
  • 标题:Accept-Language,值:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
  • 标头:Cookie,值:ASP.NET_SessionId=242xbd55fxhxv055hfunnj55
  • 标头:主机,值:本地主机:61045
  • 标头:用户代理,值:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 6.1)

现在,我们使处理程序能够在 IIS7-Manager 中侦听扩展名为.aspx的文件。如果我们第二次运行“<strong>MyPage.aspx”,PageLoad-Event将被触发并显示所有标题信息......这是我的问题。我什么也看不到,因为处理程序正在处理“MyPage.aspx”的传入请求,并且永远不会到达/触发 PageLoad-Event。

也许还有另一种技术可以更新传入请求的标头信息(在 .NET 中)。

任何帮助是极大的赞赏。

4

1 回答 1

0

从您编写的 Http 处理程序中获取代码并在 global.asax 中运行它。

像这样的东西:

protected void Application_BeginRequest()
{
    // Manipulate the headers as you see fit.
}
于 2013-09-24T13:48:10.707 回答