从ExecuteRequest管道中的sitecore中删除.aspx扩展名

时间:2014-07-30 07:01:54

标签: c# asp.net httprequest sitecore sitecore7

目前我正在尝试从sitecore网址中删除.aspx扩展名。博客建议更改以下内容可以解决此问题:

<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true"

问题是,这不适用于我们网站中的所有代码,因为某些自定义控件强制使用.aspx。

我的想法是,如果我可以在将响应发送回用户之前进入管道,我可以将URL更改为更友好的SEO(没有.aspx),我正在尝试使用以下代码

public class CustomExecuteRequest : Sitecore.Pipelines.HttpRequest.ExecuteRequest
{
    protected override void PerformRedirect(string url)
    {
        base.PerformRedirect(url.Replace(".aspx" , ""));
    }

    public override void Process(Sitecore.Pipelines.HttpRequest.HttpRequestArgs args)
    {
        PerformRedirect(args.Url.FilePathWithQueryString.Replace(".aspx", ""));

        //args.Url.FilePathWithQueryString = args.Url.FilePathWithQueryString.Replace(".aspx", "");

        //base.Process(args);
    }
}

代码正在被攻击并且此解决方案正常工作,但是它正在执行重定向,这实际上不是我想要做的事情,我宁愿只是定期请求并清除URL。问题是args变量有一个只读字段(下面已注释掉),用于实际创建URL。

有没有人对我如何更改网址或管道中的其他地方有任何想法?

2 个答案:

答案 0 :(得分:2)

您在HttpRequestPipeline中所做的事情当然不是更改链接的正确方法。与任何Web应用程序一样,页面上的任何链接都将作为HTTP请求的内容返回给客户端。在请求期间重定向不会更改呈现的内容。

这样做的唯一方法是艰难的方式:

  • 查找源中生成包含.aspx的链接的所有位置。在解决方案中搜索“aspx”可能会有所帮助
  • 查找对UrlOptions和LinkManager的所有引用,并检查 AddAspxExtension = true 是否手动设置为urlOptions。

像这样的东西总会产生一个.aspx结尾例如:

var urlOptions = UrlOptions.DefaultOptions;
urlOptions.AddAspxExtension = true;

LinkManager.GetItemUrl(item, urlOptions);

答案 1 :(得分:0)

要么改变所有链接以使用链接管理器的困难方法,要么是时间紧张,然后建议可能在sitecore之外的东西并使用IIS urlrewrite模块。