当重定向到另一个URL时,值不属于预期范围例外

问题描述 投票:0回答:2

我试图重定向到另一个URL,以防找不到原始URL,但是存在到另一个URL的映射,我需要重定向到另一个URL。

public class RedirectRequestHandler:ExecuteRequest
{
    private string _host { get; set; }
    private HttpContext _context { get; set; }
    public RedirectRequestHandler()
    {
        _context = HttpContext.Current;
        _host = _context.Request.Url.Host;
    }

    protected override void RedirectOnItemNotFound(string url)
    {
        Database siteCoreContext = Context.Database;
        try
        {
            Uri redirectedUrl;
            if (GetRedirectedUrl($"{_host}{_context.Request.RawUrl}",out redirectedUrl))
            {
                 var uri = redirectedUrl.AbsoluteUri;
                _context.Response.RedirectPermanent(uri);
            }              

        }
        catch (Exception exception)
        {
            base.RedirectOnItemNotFound(url);
        }

        _context.Response.End();
    }
}

代码抛出异常:

在System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode,IntPtr errorInfo)在System.Web.Hosting.IIS7WorkerRequest.SendStatus处(Int32 statusCode,Int32 subStatusCode,字符串statusDescription)在System.Web.HttpResponse.UpdateNativeResponse(布尔sendHeaders)在System.Web.HttpResponse.Flush(Boolean finalFlush,布尔异步)在System.Web.HttpResponse.End()在System.Web.HttpResponse.Redirect处(字符串url,布尔值endResponse,布尔值永久值)在WolfGreenfield.Classes.RedirectRequestHandler.RedirectOnItemNotFound(字符串url)中的C:\ Code \ wgf-website \ src \ website \ classes \ RedirectRequestHandler.cs:line 31

消息是:

该值不在预期范围内

我不确定该如何解决?我只想重定向到另一个页面,然后将301 HTTP状态代码发送回浏览器。

c# sitecore httpresponse http-redirect
2个回答
0
投票

问题是我在整个代码中使用了相同的上下文(_context)。另外,要永久重定向,我使用了以下代码:

var context = HttpContext.Current;
Item item = GetItemFromUrl(redirectedUrl);    
context.Response.RedirectPermanent(LinkManager.GetItemUrl(item),true);

0
投票

如果您也遇到上述问题,建议的解决方案对您不起作用,并且您的Sitecore安装仍显示上述错误,建议您检查失败的Sitecore安装所创建的剩余文件,然后尝试重新启动您的网站位于IIS中,如果您能够看到上述索引错误,请尝试使用另一个实例名称(可能带有另一个标识符)。

在我的计算机上,它的创建方式类似于“ sc901.dev..xconnect”和“ sc901.dev..sc.local”我刚刚编辑了安装脚本以更改实例名称。

© www.soinside.com 2019 - 2024. All rights reserved.