Миграция устаревшего ASP.NET в MVC 2 (RC): события HttpApplication не запускаются, основной пользователь является нулевым

проблема

Я пытаюсь взять существующее веб-приложение ASP.NET и вручную перенести его для использования MVC 2 (в настоящее время я использую RC). Я сделал несколько шагов (яЯ перечислю через мгновение) и, кажется, это работает, но потом я заметил, что могуустановитьAuthorizeAttribute потому что пользователь является нулевым на контроллере. Затем я заметил, что когда я перехожу к действию, ни одно из HttpApplication 'Вызываются обычные события жизненного цикла (такие как BeginRequest и т. д.). Я полагаю, чтоВозможно, это связано с тем, что принципал пользователя имеет значение null Веб-хостом является локальный экземпляр IIS7 (на моей рабочей станции Vista).

Я создал новое веб-приложение MVC 2 для использования в качестве справочного материала при миграции. Он работает просто отлично, вызывая события приложения и заполняя принципал User, как я и ожидал.

Если ты'Вы чувствуете, что хотите наказать себя, читайте подробности (в меру своих возможностей) ниже.

Шаги миграции

Убедитесь, что пул приложений для каталога приложений .NET 2.0 и встроенныйСсылка System.Web.Abstractions (v.3.5.0.0), System.Web.routing (v3.5.0.0) и System.Web.Mvc (v2.0.0.0) в моем веб-проекте. Теперь я добавил System.Web.Mvc в качестве локальной ссылки, чтобы упростить интеграцию и развертывание.Модифицировал csproj для включения дополнения MVC VS (см.Эта статья)Добавлены каталоги Controllers и Views в проект, добавленные в /Views/web.config из моего примера приложения MVC.Модифицировал мой web.config (НОТА: У меня есть другое дерьмо в модулях и обработчиках, но я скрыл это для простоты и безопасности ... но они вполне могут быть частью проблемы):

compilation раздел:


      
        
        
        
        
        
        
        
        
      
    

pages раздел:


  
    
    
  

  
    
    
    
    
    
    
  

system.webServer/modules раздел (помните, IIS7 интегрирован):


  
  
  
  


system.webServer/handlers раздел:


      
      
      
      
      
      
      
      
      
      
      
    

Обновил мой global.asax, чтобы регистрировать маршруты и игнорировать вещи, которые мешали бы моим устаревшим вещам:

private static void RegisterRoutes(RouteCollection routes)
{
  // place any routes here you need to ignore, whether they
  // be legacy or legitimate resources.
  routes.IgnoreRoute(""); // i currently have functionality at "/", and this route frees up the root to be used by my Default.aspx
  routes.IgnoreRoute("{webForms}.aspx/{*pathInfo}");
  routes.IgnoreRoute("{webServices}.asmx/{*pathInfo}");
  routes.IgnoreRoute("ajaxpro/{*pathInfo}");
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new {controller = "Home", action = "Index", id = ""} // Parameter defaults
  );
}   



protected void Application_Start()
{
   // legacy crap here

   AreaRegistration.RegisterAllAreas();    
   RegisterRoutes(RouteTable.Routes);
}

Дополнительная информация

Я также использую последнюю версию Autofac (v1.4.5.676) и использую их обработчики веб-интеграции. Я'мы проверили оба пути, все автофакты полностью удалены / отключены и все настроено так, как я хочу; не влияет на проблему в любом случае.

Мы также попробовали это с моими специализированными супер сладкими настройками IgnoreRoute и без них. Нет эффекта.

Также я'Я хотел бы прояснить, что маршруты, кажется, работают, я отправляюсь на мои контроллеры и действия должным образом, у меня просто есть принципал Null на HttpContext.Current.User, и он, похоже, полностью не вызывает событий жизненного цикла приложения. Если бы я нея должен получить текущего участника или сделать какое-нибудь надоедливое разрешение, яникогда не знал, что что-то не так;)

И да, обычные страницы ASPX работают правильно, а события жизненного цикла приложения вызываются нормально.

Вот'Вот пример простого тестового контроллера, который я сделал и который не работает:

    [Authorize]
    public class FartsController : Controller
    {
        //
        // GET: /Farts/
        public ActionResult Index()
        {
            return View();
        }

    }

получая следующее исключение:

[NullReferenceException: Object reference not set to an instance of an object.]
   System.Web.Mvc.AuthorizeAttribute.AuthorizeCore(HttpContextBase httpContext) +48
   System.Web.Mvc.AuthorizeAttribute.OnAuthorization(AuthorizationContext filterContext) +35
   System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor) +103
   System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +316
   System.Web.Mvc.Controller.ExecuteCore() +104
   System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +36
   System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7
   System.Web.Mvc.c__DisplayClass8.b__4() +34
   System.Web.Mvc.Async.c__DisplayClass1.b__0() +21
   System.Web.Mvc.Async.c__DisplayClass8`1.b__7(IAsyncResult _) +12
   System.Web.Mvc.Async.WrappedAsyncResult`1.End() +53
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +43
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +7
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8678910
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Это отстой :(. Спасибо за чтение моего рассказа.

Ответы на вопрос(2)

Ваш ответ на вопрос