5

我在 Web 表单应用程序的子文件夹中运行混合 MVC 应用程序。

在 VS 2010 调试(Cassini)中一切正常,但是当我部署到 IIS7.5 时

我收到以下错误:

'HttpContext.SetSessionStateBehavior' can only be invoked before
  'HttpApplication.AcquireRequestState' event is raised.

它在 MVC 应用程序子文件夹的文件的最后一行 ( httpHandler.ProcessRequest(HttpContext.Current);)上出错。default.aspx

public void Page_Load(object sender, System.EventArgs e)
{
    string pathToRewriteTo = Request.Path.ToLowerInvariant().Replace("default.aspx", "Home/Index");

    HttpContext.Current.RewritePath(pathToRewriteTo, false);

    IHttpHandler httpHandler = new MvcHttpHandler();

    httpHandler.ProcessRequest(HttpContext.Current);
}

但是,如果我从 MVC 根文件夹手动导航到 Home/Index,我可以从那里看到我的应用程序很好。

我查看了抛出的错误,我只找到处理服务器传输而不是 MVC 路由的答案。

我还检查IIS7.5了路由处理模块、以集成模式运行的应用程序池等的配置。

任何帮助,将不胜感激。

4

1 回答 1

8

我们遇到了类似的问题。MVC2 及以上版本的 MVCHttpHandler 有变化。

您需要将其更改为使用httpContext.Server.TransferRequest.

试试下面的代码片段:

var httpContext = HttpContext.Current;
httpContext.Server.TransferRequest(Url, true); // change to false to pass query string parameters if you have already processed them
于 2012-05-30T16:26:28.653 回答