ASP.NET HttpModule URL 重写 (一)

大家好,又来和大家见面了,此次给大家带来的URL重写,关于URL重写是什么,有什么好处,如何重写,今天我和大家一起分享一下我的经验

一、URL重写

        URL重写就是首先获得一个进入的URL请求然后把它重新写成网站可以处理的另一个URL的过程。举个例子来说,如果通过浏览器进来的URL是“UserProfile.aspx?ID=1”那么它可以被重写成 “UserProfile/1.aspx”。

二、URL重写优点

          1、有利于百度、谷歌等搜索引擎收录于抓取,如果你是网站优化高手的化,这就是基本功了。。。

          2、更具有可读性,伪装你的技术实现,让别人想攻击你都要有一定的难度!!!

三、如何URL重写

         1、ASP.NET实现一共有两种

                   a.利用HttpModule处理request请求中的URL

                   b.利用插件IIS Rewrite 组件实现URL重写

          2、HttpModule实现URL重写

                a.手写看一下HttpModule,下图清楚的描述了HttpModule在整个页面请求过程中处于的低位,HttpModule是动态请求必经之路啊。

               

               c.案例剖析,让你深入体会奥妙之处

              第一步:修改如下代码

               场景:有这样两个页面,数据列表页和数据详细页面,点击列表页数据进入详细页面,我们要做数据列表页面的连接做如下修改

               修改前:<asp:HyperLink ID="hkTitle" runat="server"
                     NavigateUrl='<%# Eval("Id","BookDetail.aspx?id={0}") %>'>数据标题</asp:HyperLink>

               修改后:<asp:HyperLink ID="hkTitle" runat="server"
                     NavigateUrl='<%# Eval("Id","BookDetail_{0}.html") %>'>数据标题</asp:HyperLink>

               第二步:创建HttpModule,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///DemoModule 的摘要说明
/// </summary>
public class DemoModule:IHttpModule
{
    /// <summary>
    /// 开始处理请求事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="args"></param>
    private void context_BeginRequest(object sender,EventArgs args)
    {
        //获取HttpApplication
        HttpApplication application = sender as HttpApplication;
        //获取用户请求的URL
        string oldUrl = application.Request.RawUrl;
        //如果请求中存在“BookDetail”字符进行处理请求
        if (oldUrl.IndexOf("BookDetail") > 0)
        {
            //截取BookDetail之前位置的字符串
            string newUrl = oldUrl.Substring(0, oldUrl.IndexOf("BookDetail"));
            //请求的新字符串为"BookDetail.aspx?bid=XXXXXXXX"
            newUrl = newUrl + "BookDetail.aspx?bid=" + oldUrl.Substring(oldUrl.LastIndexOf("_") + 1,
                (oldUrl.IndexOf(".") - oldUrl.LastIndexOf("_") - 1));
            //将请求中的URL进行重写
            application.Context.RewritePath(newUrl);
        }
       
       
    }


    public void Dispose()
    {
        throw new NotImplementedException();
    }

    /// <summary>
    /// 初始化事件
    /// </summary>
    /// <param name="context"></param>
    public void Init(HttpApplication context)
    {
        //关联请求开始事件
        context.BeginRequest +=new EventHandler(context_BeginRequest);
    }

}
               第三步:配置HttpModule,在web.config中如下配置
<system.web>        
      <httpModules>
            <add name="DemoModule" type="DemoModule"/>
        </httpModules>
</system.web>
               第四步:体验效果吧

今天就说到这里吧,还有一个URL重写的方法,有时间完成,大家赶快体验一下吧!!!


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要捕获m3u8请求,您可以使用ASP.NET中的HttpModuleHttpHandler。HttpModule是一种可重用的类,可拦截和处理请求和响应。HttpHandler是一种可执行文件,可以处理特定类型的请求。 以下是使用HttpModule捕获m3u8请求的示例代码: ```csharp public class M3u8Module : IHttpModule { public void Init(HttpApplication app) { app.BeginRequest += new EventHandler(OnBeginRequest); } private void OnBeginRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; HttpContext context = app.Context; if (context.Request.Url.AbsolutePath.EndsWith(".m3u8")) { //处理m3u8请求 } } public void Dispose() { } } ``` 在此示例中,您可以在OnBeginRequest方法中检查请求URL是否以“.m3u8”结尾。如果是,则可以处理请求。 要使用HttpHandler捕获m3u8请求,请创建一个继承自IHttpHandler的类,并实现ProcessRequest方法。然后,在Web.config文件中将处理程序映射到m3u8扩展名。 以下是使用HttpHandler捕获m3u8请求的示例代码: ```csharp public class M3u8Handler : IHttpHandler { public void ProcessRequest(HttpContext context) { if (context.Request.Url.AbsolutePath.EndsWith(".m3u8")) { //处理m3u8请求 } } public bool IsReusable { get { return true; } } } ``` 在Web.config文件中添加以下内容: ```xml <system.webServer> <handlers> <add name="M3u8Handler" path="*.m3u8" verb="*" type="YourNamespace.M3u8Handler" /> </handlers> </system.webServer> ``` 使用HttpModuleHttpHandler捕获m3u8请求都可以实现相同的目的。您可以根据您的需要选择其中一种方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值