ExecuteAquest PipelineのSiteCoreからの.aspx拡張子を削除します
-
21-12-2019 - |
質問
現在は、Sitecore URLから.aspx拡張機能を削除しようとしています。ブログは、次の変更がこの問題を解決することを示唆しています。
<add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="true"
.
問題は、いくつかのカスタムコントロールが.aspxの使用を強制するため、私たちのウェブサイトのすべてのコードでは機能しないことです。
私が考えていたことは、応答がユーザーに送り返される前にパイプラインに入ることができれば私がそのURLを変更することができたことが私はこれを使ってこれをやろうとしています。次のコード
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);
}
}
.
コードがヒットされているとこのソリューションが機能していますが、私がやりたいことではないものではないリダイレクトを実行しています。問題は、ARGS変数に、実際にURLを作成するために使用される読み取り専用フィールド(以下にコメントアウト)があることです。
誰もが私がここでどのようにURLを変更するか、またはおそらくパイプラインのどこか他の場所には何のアイデアを持っていますか?
解決
HTTPRequestpipelineの中にあるものは確かにリンクを変更する正しい方法ではありません。Webアプリケーションと同様に、ページ上のすべてのリンクがHTTPリクエストの内容としてクライアントに返されます。要求中にリダイレクトされたコンテンツは変更されません。
これを行う唯一の方法は難しい方法です:
- .aspxを含むリンクを生成するソースのすべての場所を見つけます。解決策内部の "aspx" の検索は を助けるかもしれません
- URLOPTIONSおよびLinkManagerへのすべての参照を検索し、 addaspxextension= true が手動で設定されているかどうかを確認します。
これは常に.aspxの終わりを生み出すでしょう。
var urlOptions = UrlOptions.DefaultOptions;
urlOptions.AddAspxExtension = true;
LinkManager.GetItemUrl(item, urlOptions);
. 他のヒント
リンクマネージャを使用するためのすべてのリンクを変更する難しい方法で、または時間の間に縛られている場合は、Sitecoreの外側に何かを提案し、IIS URLRewriteモジュールを使用してください。
所属していません StackOverflow