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"
/>
查看全文
相关阅读:
1分2分5分的硬币,组成1角,共有多少种组合
二叉树结点间最大距离
五猴分桃问题
大数加法、乘法
Java内存回收机制全解(算法+内存分配)
java实现两个大数相加,可能出现溢出错误
如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,问如何在迅速匹配兄弟字符串(如,bad和adb就是兄弟字符串)
已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10
Windows Phone 使用 HttpWebRequest 对象,通过POST 方式上传图片
Windows Phone 内存检测方法
原文地址:https://www.cnblogs.com/chenjunbiao/p/1760253.html
最新文章
我心目中最好的框架组合是
哈弗曼树与哈弗曼编码
MongoDB Replica Sets和Auto Sharding配置简介
压力测试工具Tsung
介绍 Spring 3.1 M1 中的缓存功能
MySQL主主(mastermaster)复制
高效程序员的 7 个共同特征
项目开发:速度 vs 质量
面向接口编程优缺点
开发资料学习资料下载
热门文章
面试题测试
点云数据文件格式
kd树分析
图像处理——边缘检测(1)
PCL初接触
项目开发1
Opencv中图像滤波
同步与阻塞,异步与非阻塞的区别
大数据量,海量数据 处理方法总结 (转)
一些有意思的面试题
Copyright © 2011-2022 走看看