zoukankan      html  css  js  c++  java
  • 在 ASP.NET 中执行 URL 重写的方法

    由于需要我们经常会想将动态的页面做成伪静态的,或者在get传值的时候使其简洁明了(实现“可删节”的URL),这时我们需要用到URL重写,微软的MSDN上有详细的原理和使用介绍。我这里就将一种简单的使用方法和步骤写下来。

      MSDN文章:http://msdn.microsoft.com/zh-cn/library/ms972974.aspx

      具体实现步骤(其中的一种实现方法):

      一、下载相关的DLL(ActionlessForm.dll和UrlRewriter.dll)

        http://download.csdn.net/detail/yingwanghbx/4510059

      二、在项目中引用那两个DLL文件

        右击项目,点击Add Reference,选择Browse,然后选择相应的DLL,点击OK即可。

      三、添加browser文件

      1、右击项目,点击Add-New Item,选择Browser File,取个有意义的名字。在生成的*.browser文件的browsers节点中添加如下代码:

    复制代码
    <!--URLRewriter-->
        <browser refID="Default">
          <controlAdapters>
            <adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
                   adapterType="URLRewriter.Form.FormRewriterControlAdapter"/>
          </controlAdapters>
        </browser>
    复制代码

      2、在配置文件web.config中system.web节点内添加httpModules

    <!--URLRewriter
        type:HttpModule的标识号和类库名称
        name:取一个较为友好的名称-->
        <httpModules>
          <add type="URLRewriter.RewriterModule, URLRewriter" name="RewriterModule"/>
        </httpModules>

      3、然后就是在configuration节点下添加(必须是第一个子节点):

    复制代码
    <!--URLRewriter-->
      <configSections>
        <section name="CustomConfiguration" type="URLRewriter.Config.UrlsSection, URLRewriter"/>
      </configSections>
      <CustomConfiguration>
        <urls>
          <!--([w]+)表示,1到n个字母或数字或下划线或汉字组成-->
          <add virtualUrl="~/Default/([w]+)*" destinationUrl="~/Default.aspx?username=$1"/>
          <add virtualUrl="~/Default/([w]+)*/([w]+)*" destinationUrl="~/Default.aspx?newsTypeId=$1&amp;newsWhere=$2"/>
          <add virtualUrl="~/page/user/login" destinationUrl="~/page/user/login.aspx"/>
          <add virtualUrl="~/page/user/registe" destinationUrl="~/page/user/registe.aspx"/>
          <add virtualUrl="~/page/index" destinationUrl="~/page/index.aspx"/>
        </urls>
      </CustomConfiguration>
    复制代码

      如上,在不需要传参的情况下,可以直接在virtualUrl里面写要转化地址,destinationUrl为真实地址。在需要传参的情况下,用正则表达式代替,多个参数,在destinationUrl中用&amp分隔,在virtualUrl中用自己规定的符号代替,我是用的‘/’分隔的。

      4、测试,在Default的Page_Load中添加如下代码

    if (!string.IsNullOrEmpty(Request.Params["newsTypeId"]))
    {
        string newsId = Request.Params["newsTypeId"].ToString();
        string newsWhere = Request.Params["newsWhere"].ToString();
        Response.Write("newsid:" + newsId + "<br/>newsWhere:" +newsWhere);
    } 

    结果如下:

      5、加入窗体回传保持的组件:

      在你的这个页面中加入:
    <%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
    再把你的<Form...>改为:
    <skm:Form id="你的表单名" method="post" runat="server">
    .....
    </skm:Form>

      6、在IIS7.5里配置

      请看他人博客,我就不写了,主要是找到和网站相对的连接池,选择framework 4.0经典模式

    http://www.cnblogs.com/zhongweiv/archive/2011/10/29/UrlRewriter_IIS.html

  • 相关阅读:
    CountDownLatch原理分析
    Maven項目打包報錯:Plugin execution not covered by lifecycle configuration
    Java实现编辑距离算法
    MQ的深入理解
    关于HashMap
    JVM基础详解
    Java实现Mysql的 substring_index 函数功能
    Kettle发送邮件
    Kettle实现从数据库中提取数据到Excel
    bzoj1596[Usaco2008 Jan]电话网络*
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/4653682.html
Copyright © 2011-2022 走看看