目前我正在尝试从Sitecore URL中删除.aspx扩展。博客建议改变以下内容将解决此问题:

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

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

我认为是什么,如果我能在回复之前进入管道,我可以将URL更改为一个更加友好(没有.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的只读字段(下面注释)。

有没有人对如何在这里改变URL的任何想法,或者可能在管道中的其他地方?

有帮助吗?

解决方案

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

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

  • 在源中查找生成包含.aspx的链接的所有位置。解决方案内的搜索“aspx”可能有助于
  • 查找对URLOPTIONS的所有引用和链接管理器,并检查 addaspxextension= TRUE 是否手动设置为URLOPTIONS。

这样的东西将始终生成一个.aspx结束,例如:

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

LinkManager.GetItemUrl(item, urlOptions);
.

其他提示

更改所有链接以使用链接管理器的艰难方式,或者如果您绑定时间,那么建议某些东西可能在Sitecore之外并使用IIS URLREWRITE模块。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top