zoukankan
html css js c++ java
增强XmlSiteMapProvider功能
上篇随笔
所述的方法可以指定SiteMapPath控件使用指定目录,指定文件名的sitemap文件。但是如果遇到Transfer的页面或者带查询的页面参数时,内置的功能可能不能满足你的要求了,这时可以编写自已的Provider来实现,如下我编写一个JobXmlSiteMapProvider类,它继承于XmlSiteMapProvider类,其中须重写BuildSiteMap()方法,还有就是通过修改传入rawUrl来增强其适应Transfer的能力。
public
class
JobXmlSiteMapProvider : XmlSiteMapProvider
{
public
override
SiteMapNode BuildSiteMap()
{
return
base
.BuildSiteMap();
}
public
override
SiteMapNode FindSiteMapNode(
string
rawUrl)
{
//
针对Transfer页面进行优化
rawUrl
=
OptimizeTransferViewJob(rawUrl);
rawUrl
=
OptimizeTransferViewCompany(rawUrl);
return
base
.FindSiteMapNode(rawUrl);
}
public
override
SiteMapNode FindSiteMapNodeFromKey(
string
key)
{
return
base
.FindSiteMapNodeFromKey(key);
}
/**/
///
<summary>
///
针对Transfer ViewJob.aspx页面进行优化
///
</summary>
private
string
OptimizeTransferViewJob(
string
rawUrl)
{
HttpContext context
=
HttpContext.Current;
string
urlToTransfer
=
context.Request.RawUrl;
string
match
=
@"
jobs\/([a-fA-F0-9]{32}|([a-fA-F0-9]{8})-([a-fA-F0-9]{4})-([a-fA-F0-9]{4})-([a-fA-F0-9]{4})-([a-fA-F0-9]{12}))\/viewjob.aspx
"
;
//
string replace = "Con001_ProjectManage/Job/viewjob.aspx?id=$1";
//
解决大小写问题
urlToTransfer
=
urlToTransfer.ToLower();
match
=
match.ToLower();
string
matchExpression
=
Globals.GetApplicationPath()
+
match;
Regex regEx
=
new
Regex(matchExpression, RegexOptions.IgnoreCase
|
RegexOptions.Singleline
|
RegexOptions.CultureInvariant
|
RegexOptions.Compiled);
if
(regEx.IsMatch(urlToTransfer))
{
//
rawUrl = Regex.Replace(urlToTransfer, match, replace);
rawUrl
=
Globals.GetApplicationPath()
+
"
/Con001_ProjectManage/Job/viewjob.aspx
"
;
}
return
rawUrl;
}
/**/
///
<summary>
///
针对Transfer ViewCompany.aspx页面进行优化
///
</summary>
private
string
OptimizeTransferViewCompany(
string
rawUrl)
{
HttpContext context
=
HttpContext.Current;
string
urlToTransfer
=
context.Request.RawUrl;
string
match
=
@"
Jobs\/([a-fA-F0-9]{32}|([a-fA-F0-9]{8})-([a-fA-F0-9]{4})-([a-fA-F0-9]{4})-([a-fA-F0-9]{4})-([a-fA-F0-9]{12}))\/viewcompany.aspx
"
;
//
string replace = "Con001_ProjectManage/Job/viewcompany.aspx?id=$1";
//
解决大小写问题
urlToTransfer
=
urlToTransfer.ToLower();
match
=
match.ToLower();
string
matchExpression
=
Globals.GetApplicationPath()
+
match;
Regex regEx
=
new
Regex(matchExpression, RegexOptions.IgnoreCase
|
RegexOptions.Singleline
|
RegexOptions.CultureInvariant
|
RegexOptions.Compiled);
if
(regEx.IsMatch(urlToTransfer))
{
//
如果请求路径符合正则表达式
//
rawUrl = Regex.Replace(urlToTransfer, match, replace);
rawUrl
=
Globals.GetApplicationPath()
+
"
Con001_ProjectManage/Job/viewcompany.aspx
"
;
}
return
rawUrl;
}
另外还要修改一下Web.config文件,如:
<
add
siteMapFile
="~/App_Data/Job.sitemap"
name
="JobXmlSiteMapProvider"
type
="CSDN.Job.Components.JobXmlSiteMapProvider, CSDN.Job.Components"
/>
查看全文
相关阅读:
C#将datatable生成easyui的绑定tree 的json数据格式
asp.net DataTable转JSON
asp.net面试题
windows笔记线程的一些性质
windows笔记创建线程的另一个函数_beginthreadex
windows笔记【内核对象线程同步】等待定时器内核对象
windows笔记用哪个创建线程CreateThread还是_beginthread
windows笔记【内核对象线程同步】信标内核对象
windows笔记【内核对象线程同步】事件内核对象
windows笔记【内核对象线程同步】等待函数
原文地址:https://www.cnblogs.com/chenjunbiao/p/1760253.html
最新文章
[转]关键链方法的几种缓冲长度计算方法
[转]SharePoint 2010工作流原理详述
如何安装高保真声卡驱动(How to install HD audio driver)
自由浮动时间与总浮动时间
20110503 Conversation with Lily
转:px vs. em 95%的中国网站需要重写CSS
各浏览器Cookie大小、个数限制
ASP.NET 应用程序生命周期概述
[转]Top 7 Myths about HTTPS (HTTPS的七个误解)
MD5算法的应用
热门文章
CSS 字体系列
How Google Tests Software
ASP.NET 页生命周期概述
分布式数据库查询、修改
Web.Config
AjaxPro实现方法
DataTable列修改
IIS之错误解决之道
asp.net 工厂模式讲解
datatable插入Sql数据库
Copyright © 2011-2022 走看看