欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【asp.net 不用组件的URL重写(适用于较大型项目)】,下面是详细的讲解!
asp.net 不用组件的URL重写(适用于较大型项目)
//用到的命名空间
using System;
using System.Diagnostics;
using System.Threading;
using System.Web;
using System.Xml;
using System.Text.RegularExpressions;
using System.IO;
//注意名称空间
namespace my.Forum
{
//继承自IHttpModule接口
public class HttpModule : System.Web.IHttpModule
{
/// <summary>
/// 实现接口的Init方法
/// </summary>
/// <param name="context"></param>
public void Init(HttpApplication context)
{
//建立个委托让他执行下面的ReUrl_BeginRequest事件
context.BeginRequest +=new EventHandler(ReUrl_BeginRequest);
}
/// <summary>
/// 实现接口的Dispose方法
/// </summary>
public void Dispose()
{
}
private void ReUrl_BeginRequest(object sender, EventArgs e)
{
HttpContext context=((HttpApplication) sender).Context;
string requestPath=context.Request.Path.ToLower();
//SiteUrls是下面的一个类,这里大家可以重构下
foreach (SiteUrls.URLRewrite url in SiteUrls.GetSiteUrls().Urls)
{
//是否找到了匹配选项
if (Regex.IsMatch(requestPath, url.Pattern, RegexOptions.None | RegexOptions.IgnoreCase))
{
//开始替换成我们程序能读懂的url
string newUrl=Regex.Replace(requestPath.Substring(context.Request.Path.LastIndexOf("/")),
url.Pattern, url.QueryString, RegexOptions.None | RegexOptions.IgnoreCase);
//这里你可以输出一下看看
//context.Response.Write(url.Page + "<br>" + newUrl+"<br>");
//开始把用户便于记忆的URL替换成程序能读懂的url
context.RewritePath(url.Page, string.Empty, newUrl);
}
}
}
}
public class SiteUrls
{
//定义成volatitle类型主要是为了多线程访问方便,在这个示例程序中没什么实际意义,项目大了就有用了
private static volatile SiteUrls instance=null;
string UrlsFile=HttpContext.Current.Server.MapPath("/config/urls.config");
//定义两个属性
private System.Collections.ArrayList _Urls;
public System.Collections.ArrayList Urls
{
get { return _Urls; }
set { _Urls=value; }
}
//这个就是个键植对 表害怕一点也不高深
private System.Collections.Specialized.NameValueCollection _Paths;
public System.Collections.Specialized.NameValueCollection Paths
{
get { return _Paths; }
set { _Paths=value; }
}
//构造函数
private SiteUrls()
{
Urls=new System.Collections.ArrayList();
Paths=new System.Collections.Specialized.NameValueCollection();
//以XML个数读取那CONFIG文件
XmlDocument urlconfig=new XmlDocument();
urlconfig.Load(UrlsFile);
XmlNode root=urlconfig.SelectSingleNode("urls");
foreach (XmlNode n in root.ChildNodes)
{
//XmlNodeType.Comment如果不是注释
if (n.NodeType !=XmlNodeType.Comment && n.Name.ToLower()=="rewrite")
{
XmlAttribute name=n.Attributes["name"];
XmlAttribute path=n.Attributes["path"];
XmlAttribute page=n.Attributes["page"];
XmlAttribute querystring=n.Attributes["querystring"];
XmlAttribute pattern=n.Attributes["pattern"];
if (name !=null && path !=null && page !=null
&& querystring !=null && pattern !=null)
{
Paths.Add(name.Value, path.Value);
//压进去的都是url实体类
Urls.Add(new URLRewrite(name.Value, pattern.Value, page.Value.Replace("^", "&"),
querystring.Value.Replace("^", "&")));
}
}
}
}
//用方法实例化
public static SiteUrls GetSiteUrls()
{
if (instance==null)
{
instance=new SiteUrls();
}
return instance;
}
#region url实体类
public class URLRewrite
{
#region 成员变量
private string _Name;
public string Name
{
get { return _Name; }
set { _Name=value; }
}
private string _Pattern;
public string Pattern
{
get { return _Pattern; }
set { _Pattern=value; }
}
private string _Page;
public string Page
{
get { return _Page; }
set { _Page=value; }
}
private string _QueryString;
public string QueryString
{
get { return _QueryString; }
set { _QueryString=value; }
}
#endregion
#region 构造函数
public URLRewrite(string name, string pattern, string page, string querystring)
{
_Name=name;
_Pattern=pattern;
_Page=page;
_QueryString=querystring;
}
#endregion
}
#endregion
}
}
关于asp.net 不用组件的URL重写(适用于较大型项目)的用户互动如下:
相关问题:Asp.net Ajax项目中怎么在webconfig中配置(使用的...
答: ~/d(\d+)\.aspx ~/view.aspx?id=$1 >>详细
相关问题:求asp.net 映射 url重写 详细信息、最好是有步骤的...
答:第一步:下载 Intelligencia.UrlRewriter.dll组件,这个网上太多了。 第二步:添加Intelligencia.UrlRewriter.dll的引用。 第三步:在web.config中设置三个地方 1、在节中加上; 2、在节中加上; 3、在节中添加 (这段替换规则需要根据你的实际... >>详细
相关问题:帮忙写个URL重写规则的表达式:把http://127.0.0.1/...
答:UrlRewriter 是微软封装好了的一个URL重写组件。使用它可以让我节约很多自已开发的时间。 好了,开始讲述我的应用经验,这只是很菜鸟的经验,高手就不用看了。 第一步,请从此下载此组件。解压,把UrlRewriter.dll copy到你的项目 bin 目录下。 ... >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
