Asp.net mvc 2 ASP.NET MVC2-重定向到重写控制器中的Url

Asp.net mvc 2 ASP.NET MVC2-重定向到重写控制器中的Url,asp.net-mvc-2,redirect,controller,response.redirect,Asp.net Mvc 2,Redirect,Controller,Response.redirect,我创建了一个ControllerBase类,它覆盖默认控制器类的Execute方法。我这样做是为了检查url并从数据库中提取相关页面。如果找不到该页面,我希望重定向到特定的url(“无效页面”)。除重定向外,所有操作都正常。我尝试使用Response.Redirect(“无效页面”),但它给了我一个空引用错误。还尝试了requestContext.HttpContext.Response.Redirect(“无效页面”),但出现了相同的错误。我猜它不想让您通过使用响应重定向绕过MVC过程。由于覆

我创建了一个ControllerBase类,它覆盖默认控制器类的Execute方法。我这样做是为了检查url并从数据库中提取相关页面。如果找不到该页面,我希望重定向到特定的url(“无效页面”)。除重定向外,所有操作都正常。我尝试使用Response.Redirect(“无效页面”),但它给了我一个空引用错误。还尝试了requestContext.HttpContext.Response.Redirect(“无效页面”),但出现了相同的错误。我猜它不想让您通过使用响应重定向绕过MVC过程。由于覆盖实际上并不返回ActionResult,所以我不能只返回重定向操作。有人知道我怎么在这里重定向吗

这是我的ControllerBase课程:

public class ControllerBase : Controller
{
    protected override void Execute(System.Web.Routing.RequestContext requestContext)
    {
        ViewData.Model = new DynamicPage{ LeftColumnCss = "bg5"};
        var friendlyUrl = (string)requestContext.RouteData.Values["friendlyUrl"];
        if (friendlyUrl != null && !friendlyUrl.Equals("invalid-page"))
        {
            var page = PageService.FetchByFriendlyUrl(null, (int?)PageCategoryType.MomMavens, friendlyUrl);

            if (page == null)
            {
                var archivedPage = PageArchiveService.FetchByFriendlyUrl(friendlyUrl);
                if (archivedPage != null)
                {
                    page = PageService.FetchById(archivedPage.PageID);
                    if (page != null)
                    {
                        requestContext.HttpContext.Response.Redirect(PageService.GetPageAbsoluteUrl(page));
                    }
                }
            }

            if (page == null)
            {
                //This is where I need to figure out how to do a redirect                   //requestContext.HttpContext.Response.Redirect("invalid-page");
                //base.Redirect("invalid-page");
                Response.Redirect("contact-us");
                return;
            }
            ((DynamicPage)ViewData.Model).CurrentPage = page;

            // Allow the page to override the left column class
            if (!string.IsNullOrEmpty(page.LeftColumnCssClasses))
            {
                var classes = page.LeftColumnCssClasses.Split(';');
                var index = SubSonic.Sugar.Numbers.Random(0, classes.Length);
                if (index == classes.Length)
                    index--;
                ((DynamicPage)ViewData.Model).LeftColumnCss = classes[index];
            }
        }

        base.Execute(requestContext);
    }

}
编辑: 不知怎的,我通过改变线路来修复它:

if (friendlyUrl != null && !friendlyUrl.Equals("invalid-page"))


然后使用
requestContext.HttpContext.Response.Redirect(“无效页面”)
,尽管这之前给了我一个错误。不知道为什么会有不同。不知何故,让带有空白URL的页面绕过所有这些检查会导致问题。

您是否尝试过
服务器.Transfer()


看起来您可以对RouteValueDictionary进行更改,并且可以使用,但我不记得它是否为只读集合。

您是否尝试过
服务器.Transfer()


看起来您可以对RouteValueDictionary进行更改,并且可以正常工作,但我不记得它是否为只读集合。

通过稍微更改if语句来修复它。请参阅在原始帖子中编辑。仍然不能完全确定出了什么问题。

通过稍微更改if语句来修复它。请参阅在原始帖子中编辑。仍然不能完全确定出了什么问题。

它说什么是空的吗?它是在代码中还是在框架中。你能发布异常吗?它说什么是空的吗?它是在代码中还是在框架中。您可以发布异常吗?很遗憾,Server.Transfer()也不起作用。另一个空引用。这就好像override类中的上下文出现了问题。而且看起来RouteValueDictionary是只读的。不幸的是,Server.Transfer()也不起作用。另一个空引用。这就好像override类中的上下文出现了问题。看起来RouteValueDictionary是只读的。
if (!friendlyUrl.Equals("invalid-page"))