私はSteveに同意します。あなたは301のリダイレクトを行うURLリライタを持っていますが、ページに必要なすべてのイメージについて、ブラウザは依然としてサーバーに301をCDN URLにリダイレクトされたことを発見します。この時点で保存しているのは、コンテンツのダウンロードだけです。
レスポンスがクライアントブラウザに送信される前に、アセットのURLを変更する応答フィルタを配置するだけで済みます。
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.RequestContext.HttpContext.Response.Filter = new CdnResponseFilter(filterContext.RequestContext.HttpContext.Response.Filter);
}
そしてCdnResponseFilter:その方法は、クライアントのブラウザは、決して静的な資産のサーバーへの呼び出しを行う必要がない
public class CdnResponseFilter : MemoryStream
{
private Stream Stream { get; set; }
public CdnResponseFilter(Stream stream)
{
Stream = stream;
}
public override void Write(byte[] buffer, int offset, int count)
{
var data = new byte[count];
Buffer.BlockCopy(buffer, offset, data, 0, count);
string html = Encoding.Default.GetString(buffer);
html = Regex.Replace(html, "src=\"/Content/([^\"]+)\"", FixUrl, RegexOptions.IgnoreCase);
html = Regex.Replace(html, "href=\"/Content/([^\"]+)\"", FixUrl, RegexOptions.IgnoreCase);
byte[] outData = Encoding.Default.GetBytes(html);
Stream.Write(outData, 0, outData.GetLength(0));
}
private static string FixUrl(Match match)
{
//However the Url should be replaced
}
}
この結果は、そのように見えるすべてのコンテンツ資産<img src="\Content\whatever.jpg" />
は<img src="cdn-url.com\Content\whatever.jpg" />
これはまさに私が必要なものです。あなたと@スティーブ! – bogert
私はASP MVCアプリケーションでこの応答フィルタをどこに置くべきですか? – DevMania
実際のResponse Filterクラスは?クラスは、コントローラがクラスにアクセスできる限り、プロジェクトのどこにでも配置できます。 –