SkipLinkText属性及其问题

最近网站的异常捕捉器老是捕捉到如下错误:
None.gif System.Security.Cryptography.CryptographicException: 填充无效,无法被移除。
None.gif   在 System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast)
None.gif   在 System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
None.gif   在 System.Security.Cryptography.CryptoStream.FlushFinalBlock()
None.gif   在 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo)
None.gif   在 System.Web.UI.Page.DecryptString(String s)
None.gif   在 System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context)
None.gif   在 System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
None.gif   在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
None.gif
分析其HTTP_REFERER,是来源于百度的快照页面,经分析百度的快照保存的页面中含有如下代码:
None.gif < img  alt ="Skip Navigation Links"  height ="0"  width ="0"  src ="/WebResource.axd?d=2CKFSExFft48UuCBt3w1pA2&amp;t=632889116642854495"  style ="border-width:0px;"   />
原因就出在"/WebResource.axd?d=2CKFSExFft48UuCBt3w1pA2&amp;t=632889116642854495"这里,把它构造成完整的URL,则会获取同上一样的异常错误,因为WebResource.axd动态生的资源已经不存在了,但百度快照上保存的页面是不会更新的,所以从该页面访问的页面都会有这种异常出现,虽然不出现页面访问不到的情况,但是该来源很多,影响了对其它的异常现象的分析,所以也得把这个问题给解决掉。

上述html代码生成的地方是由 SiteMapPath内部生成的,查阅了MSDN及反射查看了SiteMapPath的实现代码,发现在SiteMapPath的呈现阶段动态输出了一个图片资源:
None.gif protected   internal   override   void  RenderContents(HtmlTextWriter writer)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif       bool flag1 = !string.IsNullOrEmpty(this.SkipLinkText) && !base.DesignMode;
InBlock.gif      string text1 = this.ClientID + "_SkipLink";
InBlock.gif      if (flag1)
ExpandedSubBlockStart.gif ContractedSubBlock.gif       dot.gif{
InBlock.gif            writer.AddAttribute(HtmlTextWriterAttribute.Href, "#" + text1);
InBlock.gif            writer.RenderBeginTag(HtmlTextWriterTag.A);
InBlock.gif            writer.AddAttribute(HtmlTextWriterAttribute.Alt, this.SkipLinkText);
InBlock.gif            writer.AddAttribute(HtmlTextWriterAttribute.Height, "0");
InBlock.gif            writer.AddAttribute(HtmlTextWriterAttribute.Width, "0");
InBlock.gif            writer.AddStyleAttribute(HtmlTextWriterStyle.BorderWidth, "0px");
InBlock.gif            writer.AddAttribute(HtmlTextWriterAttribute.Src,  base.SpacerImageUrl);
InBlock.gif            writer.RenderBeginTag(HtmlTextWriterTag.Img);
InBlock.gif            writer.RenderEndTag();
InBlock.gif            writer.RenderEndTag();
ExpandedSubBlockEnd.gif      }
InBlock.gif      base.RenderContents(writer);
InBlock.gif      if (flag1)
ExpandedSubBlockStart.gif ContractedSubBlock.gif       dot.gif{
InBlock.gif            writer.AddAttribute(HtmlTextWriterAttribute.Id, text1);
InBlock.gif            writer.RenderBeginTag(HtmlTextWriterTag.A);
InBlock.gif            writer.RenderEndTag();
ExpandedSubBlockEnd.gif      }
ExpandedBlockEnd.gif}
再查看了一个 SpacerImageUrls的实现
None.gif internal   string  SpacerImageUrl
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif      
get
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif            
this.EnsureOccasionalFields();
InBlock.gif            
if (this._occasionalFields.SpacerImageUrl == null)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                  
this._occasionalFields.SpacerImageUrl = this.Page.ClientScript.GetWebResourceUrl(typeof(WebControl), "Spacer.gif");
ExpandedSubBlockEnd.gif            }

InBlock.gif            
return this._occasionalFields.SpacerImageUrl;
ExpandedSubBlockEnd.gif      }

ExpandedBlockEnd.gif}
确实, this .Page.ClientScript.GetWebResourceUrl调用了一个内置的图片资源,这样SiteMapPath呈现的代码中就会出现WebResource.axd的引用,接着再分析一下生成图片资源的条件: !string.IsNullOrEmpty(this.SkipLinkText) && !base.DesignMode;
这里就找到了一个属性SkipLinkText,只要把这个属性设置为空值就不会再呈现图片资源了,这个属性干什么的?查一下MSDN吧,

SkipLinkText属性是SiteMapPathTreeViewMenu 站点导航控件共有的一个属性,它的功能是"网站的每个网页上通常都使用站点导航控件。在每次访问网页和每次回发时,屏幕读取器和其他辅助设备都会朗读导航控件中的文字。用该属性可以跳过后续页或同一页面的不同视图上的重复信息。" 可以一般是用不着,所以这里就把这个属性设置为SkipLinkText=""就可以了。

转载于:https://www.cnblogs.com/BillChen/archive/2006/07/31/464191.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值