Реализация TransferResult в MVC 3 RC - не работает - PullRequest
5 голосов
/ 13 ноября 2010

Есть идеи как исправить ниже?

Существует замечательная реализация TransferResult, доступная здесь , которая отлично работала на MVC 1,2, но не работает на MVC 3 RC.

public class TransferResult : RedirectResult 
{ 
    public TransferResult(string url): base(url) 
    { 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
        var httpContext = HttpContext.Current; 
        httpContext.RewritePath(Url, false); 
        IHttpHandler httpHandler = new MvcHttpHandler(); 
        httpHandler.ProcessRequest(HttpContext.Current); 
    } 
} 

В MVC 3 RC происходит сбой httpHandler.ProcessRequest с сообщением 'HttpContext.SetSessionStateBehavior' can only be invoked before 'HttpApplication.AcquireRequestState' event is raised.

Как переписать этот код, чтобы это работало?

UPD : код работает, если выполняется на встроенном сервере разработки VS 2010, но не работает на локальном хосте IIS 7.5. Проблема до сих пор не решена.

UPD2 Этот ответ содержит модифицированную реализацию TransferResult, которая работает с MVC3. Оказывается, это даже проще, чем раньше.

Ответы [ 2 ]

1 голос
/ 15 ноября 2010

Невозможно воспроизвести. Следующее прекрасно работает в MVC 3 RC (Razor и WebForms):

public class TransferResult : RedirectResult
{
    public TransferResult(string url)
        : base(url)
    {
    }

    public override void ExecuteResult(ControllerContext context)
    {
        var httpContext = HttpContext.Current;
        httpContext.RewritePath(Url, false);
        IHttpHandler httpHandler = new MvcHttpHandler();
        httpHandler.ProcessRequest(HttpContext.Current);
    }
}

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return new TransferResult("/Home/About");
    }

    public ActionResult About()
    {
        return View();
    }
}
0 голосов
/ 14 ноября 2010

Лично я считаю, что создание маршрутов (с необходимыми ограничениями маршрутов (см. http://stephenwalther.com/blog/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx)) гораздо предпочтительнее этого «хака», который пытается выполнить невидимое перенаправление, чтобы запрос обрабатывался другим контроллером и действиемчем указано в маршрутизации.

Почему вы не можете просто использовать маршрутизацию?

...