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