为什么在控制器操作之外没有Server.TransferRequest在MVC中工作?

时间:2014-03-27 23:42:41

标签: c# asp.net asp.net-mvc asp.net-mvc-4 iis-7.5

当你在控制器操作方法之外时,我很难理解为什么Server.TransferRequest似乎不能在MVC中工作。为了展示这个问题,我创建了一个全新的,完全空的ASP.NET MVC 4项目,其中一个“home”控制器有两个动作:'Wrong'和'Right'。我想要做的是检测某人是否会'错'并将Server.TransferRequest发送到'Right',我需要在'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();
    }
}

在调试这个问题时,我打开了失败的请求跟踪,发现在第二次通过管道的不成功的情况下,我看到了:

enter image description here

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

有人有想法吗?

0 个答案:

没有答案