zoukankan      html  css  js  c++  java
  • Response.Redirect在新窗口打开的另一种方法

     这里是孟子提供的方法

    这里介绍Ihttpmodule处理请求管道的方法。Response.Redirect的原理是服务器设置返回http状态码为302,然后客户端执行跳转,用reflector可以看到.net的代码段。

    以下是HttpResponse类的Redirect方法中的跳转代码

    this.StatusCode = 0x12e
    this.RedirectLocation = url;

    所以,我们可以扩展Ihttpmodule来拦截http状态码,强制设为200,同时插入js代码段来实现新窗口打开。以下是Ihttpmodule的实现代码

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web;
    namespace ClassLibrary2
    {
        
    public class Class1:System.Web.IHttpModule
        
    {
            
    public void Init(HttpApplication application)
            
    {

                application.PreSendRequestHeaders 
    += new EventHandler(application_PreSendRequestHeaders);
            }


            
    void application_PreSendRequestHeaders(object sender, EventArgs e)
            
    {
                HttpApplication Application 
    = (HttpApplication)sender;

                HttpContext context 
    = Application.Context;

                
    if (context.Response.StatusCode == 302)
                
    {
                    context.Response.Write(
    "<script>window.open('"+context.Response.RedirectLocation+"')</script>");
                    context.Response.StatusCode 
    = 200;
                }


            }

     
            
    public  void Dispose()
            
    {
            }


            
        }

    }

    最后配置一下web.config就可以了

    <?xml version="1.0"?>
    <configuration>
        
    <system.web>
            
    <compilation debug="true"/>
            
    <authentication mode="Windows"/>
        
    <httpModules>
          
    <add name="MyModule" type="ClassLibrary2.Class1,ClassLibrary2"></add>
        
    </httpModules>
        
    </system.web>
    </configuration>

    另外一点,ms自坐主张的在跳转之后,end之前插入了这么一段代码,我得b4他们一下,解决办法,大家自己想想吧。

    this.Write("<html><head><title>Object moved</title></head><body> ");
            
    this.Write("<h2>Object moved to <a href="" + HttpUtility.HtmlAttributeEncode(url) + "">here</a>.</h2> ");
            
    this.Write("</body></html> ");
  • 相关阅读:
    创建异步Web服务
    MCAD考试计划
    微软面试题
    Reborn
    Qt项目注意事项
    在ASP.Net中两种利用CSS实现多界面
    为ASP.NET控件添加常用的JavaScript操作
    用Split函数分隔字符串
    Microsoft .NET Pet Shop 4.0
    搞定QString,string,char*,CString的互转
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204993.html
Copyright © 2011-2022 走看看