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"
/>
查看全文
相关阅读:
bash 教程 shell 基础语法
使用 Flutter 开发 Windows 桌面应用 [MD]
小tips:使用babelupgrade从babel6升级babel7
JS的可选链操作符(?.)与双问号(??),你用到了吗?
JS处理html的编码(encode)与解码(decode)
pdf A3 到 A4
grub4dos 制作U盘启动盘
amixer的用法
一个tomcat设置多个端口
PostgreSQL 配置内存参数
原文地址:https://www.cnblogs.com/chenjunbiao/p/1760253.html
最新文章
mysql 分组统计,值在前,条件在后
flot jQuery 图表插件(jquery.flot)使用
django如何将sqllite数据库改成mysql
pip install pymysql报错connet time out
mysqlclient 1.4.0 or newer is required; you have %s.' % Database.__version__
django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required; you have 0.10.0.
[React Typescript 2022] Type a Radio Button Component in React using TypeScript
[Javascript] History API
[React Typescript 2022] Type React hooks
[React Typescript 2022] Use TypeScript to Type a React Class Component
热门文章
[React Typescript 2022] Refactor a React Component using TypeScript
[AWS SOA] Route 53
[Cypress] intercept()
[AWS] CloudFormation: create EC2 with SecurityGroupIds for custom VPC
[Reac] React 18
[AWS] Creating a Private Hosted Zone and Associating It with Multiple VPCs
bash 教程 shell 模式扩展 [MD]
bash 教程 shell 字符串 转义 [MD]
SSH 教程1 客户端 服务器 配置 [MD]
SSH 教程2 密钥登录 证书登录 端口转发 [MD]
Copyright © 2011-2022 走看看