当你在控制器操作方法之外时,我很难理解为什么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();
}
}
在调试这个问题时,我打开了失败的请求跟踪,发现在第二次通过管道的不成功的情况下,我看到了:
我想知道它为什么要切换到'StaticFile'处理程序。看到这个后,我打开设置runAllManagedModulesForAllRequests ='true',这使它工作!不幸的是,我无法在我的项目中使用此设置。我发现的另一件事是,如果您尝试将Server.TransferRequest转换为.aspx文件,它将会起作用。
有人有想法吗?