c#MVC Redirect 301从控制器修改图像src

时间:2019-03-25 11:23:47

标签: c# asp.net-mvc redirect controller http-status-code-301

我正在一个现有项目中,所有图像都通过图像控制器传递,现在,当我们将静态内容(图像)从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。

谢谢。

0 个答案:

没有答案