我正在一个现有项目中,所有图像都通过图像控制器传递,现在,当我们将静态内容(图像)从MongoDB移至Azure时,我需要执行301重定向,以便从新位置。
我成功使用以下代码完成了301:
public async Task<ActionResult> Index(string id, string size)
{
string redirectUrl;
if (string.IsNullOrEmpty(assetBlobUrl)) assetBlobUrl = ConfigurationManager.AppSettings["AssetBlobUrl"];
if (!string.IsNullOrEmpty(assetBlobUrl))
{
bool blobExists = await _blobExists(size, id).ConfigureAwait(false);
if (blobExists)
{
redirectUrl = string.Format(assetBlobUrl, size, id);
return new PermanentRedirectResult(redirectUrl);
}
}
return ResponseImageNotFound();
}
public ActionResult ResponseImageNotFound()
{
Response.StatusCode = 404;
return File("/Content/images/image_not_found.jpg", "image/jpeg");
}
private async Task<bool> _blobExists(string size, string assetId)
{
return await container.GetBlockBlobReference(size + "/" + assetId + ".jpg").ExistsAsync();
}
public class PermanentRedirectResult : ActionResult
{
public string Url { get; set; }
public PermanentRedirectResult(string url)
{
this.Url = url;
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.MovedPermanently;
context.HttpContext.Response.RedirectLocation = this.Url;
context.HttpContext.Response.End();
}
}
并且工作正常,正在显示“新”图像,但问题是图像src仍指向旧的url。为了验证这一点,我只是强制控制器从一个特定的URL中选择图像,所有图像都是该强制图像,但是当您在浏览器中执行“检查”然后在源HTML中仍然看到旧图像src。
我已经知道src应该在Javascript(或jQuery)中进行更改,因为它是DOM,但这是一个非常庞大的项目,具有许多帮助程序,并且我不想开始修改很多代码,所以我想知道是否有除了重定向(已经正常工作)以外,我的图像控制器还可能替换图像src。
谢谢。