C# 为什么';t Server.TransferRequest在控制器操作之外时是否在MVC中工作?

C# 为什么';t Server.TransferRequest在控制器操作之外时是否在MVC中工作?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,iis-7.5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Iis 7.5,当您在控制器操作方法之外时,为什么Server.TransferRequest在MVC中似乎不起作用,我感到很困惑。为了展示这个问题,我制作了一个全新的、完全空的ASP.NETMVC4项目,其中一个“主”控制器有两个动作:“错误”和“正确”。我要做的是检测何时有人“出错”,并向“正确”发出Server.TransferRequest,我需要在“Application_BeginRequest”事件中执行。此代码导致404: protected void Application_Begin

当您在控制器操作方法之外时,为什么Server.TransferRequest在MVC中似乎不起作用,我感到很困惑。为了展示这个问题,我制作了一个全新的、完全空的ASP.NETMVC4项目,其中一个“主”控制器有两个动作:“错误”和“正确”。我要做的是检测何时有人“出错”,并向“正确”发出Server.TransferRequest,我需要在“Application_BeginRequest”事件中执行。此代码导致404:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (HttpContext.Current.Request.Path.ToLower().Contains("wrong"))
        {
            // this causes a 404 (note the application is hosted as a 
            // virtual app under 'cool')
            Server.TransferRequest("/cool/home/right", true);
        }
    }
但当我在“错误的”控制器操作方法中执行此操作时,效果很好:

public class HomeController : Controller
{
    public ActionResult Wrong()
    {
        // this works
        Server.TransferRequest("/cool/home/right");
        
        return View();
    }


    public ActionResult Right()
    {
        return View();
    }
}
在调试此问题时,我打开了失败的请求跟踪,并发现第二次通过管道在不成功的情况下,我看到了以下内容:

我想知道为什么它会切换到“StaticFile”处理程序。看到这一点后,我打开了设置runAllManagedModulesForAllRequests='true',这使它工作起来!不幸的是,我无法在我的项目中使用此设置。我发现的另一件事是,如果您试图将Server.TransferRequest转换为.aspx文件,它将起作用


有人有想法吗?

我认为您应该使用server.transfer-in属性,而不是实际操作