2013-05-08 232 views
4

我已經搜索了互聯網的高低,並檢查了所有以前回答的問題,但是我找不到相同的標題。未找到路徑'/ Home'的控制器或未實施IController

我從操作方法在我的認證控制器返回RedirectToAction(「指數」,「家」),然後會收到以下異常:

Server Error in '/' Application. 
The controller for path '/Home' was not found or does not implement IController. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: The controller for path '/Home' was not found or does not implement IController. 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 


[HttpException (0x80004005): The controller for path '/Home' was not found or does not implement IController.] 
    System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +683921 
    System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +89 
    Castle.Proxies.Invocations.IControllerFactory_CreateController.InvokeMethodOnTarget() +155 
    Castle.DynamicProxy.AbstractInvocation.Proceed() +116 
    Glimpse.Core.Extensibility.ExecutionTimer.Time(Action action) +85 
    Glimpse.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext context) +186 
    Castle.DynamicProxy.AbstractInvocation.Proceed() +604 
    Castle.Proxies.IControllerFactoryProxy.CreateController(RequestContext requestContext, String controllerName) +193 
    System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +305 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +87 
    System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Func`1 func) +41 

[HttpException (0x80004005): Execution of the child request failed. Please examine the InnerException for more information.] 
    System.Web.Mvc.ServerExecuteHttpHandlerWrapper.Wrap(Func`1 func) +785832 
    System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride) +3977 
    System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage) +275 
    System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm) +94 
    System.Web.Mvc.Html.ChildActionExtensions.ActionHelper(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues, TextWriter textWriter) +700 
    System.Web.Mvc.Html.ChildActionExtensions.Action(HtmlHelper htmlHelper, String actionName, String controllerName, RouteValueDictionary routeValues) +123 
    Panoptes.Ui.Web.Views.Home.Index.Execute() in c:\Dropbox\Energy Management System\Application\Panoptes\Panoptes.Ui.Web\obj\CodeGen\Views\Home\Index.cshtml:48 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +280 
    System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +126 
    System.Web.WebPages.StartPage.ExecutePageHierarchy() +143 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +181 
    RazorGenerator.Mvc.PrecompiledMvcView.Render(ViewContext viewContext, TextWriter writer) +952 
    System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +378 
    Castle.Proxies.AsyncControllerActionInvokerProxy.InvokeActionResult_callback(ControllerContext controllerContext, ActionResult actionResult) +21 
    Castle.DynamicProxy.AbstractInvocation.Proceed() +116 
    Glimpse.Core.Extensibility.ExecutionTimer.Time(Action action) +85 
    Glimpse.Core.Extensibility.AlternateMethod.NewImplementation(IAlternateMethodContext context) +186 
    Castle.DynamicProxy.AbstractInvocation.Proceed() +604 
    System.Web.Mvc.<>c__DisplayClass1a.<InvokeActionResultWithFilters>b__17() +33 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +854172 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +854172 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +265 
    System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) +838644 
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) +28 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +65 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +51 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) +15 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +51 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288 


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18034 

鑑別控制如下所示:

public class AuthenticationController : Controller 
{ 
    private ILogService _logService; 
    private IEmailProvider _emailProvider; 
    private IMembershipProvider _membershipProvider; 
    private IAuthenticationProvider _authenicationProvider; 

    public AuthenticationController(ILogService logService, IEmailProvider emailProvider, IMembershipProvider membershipProvider, IAuthenticationProvider authenicationProvider) 
    { 
     _logService = logService; 
     _emailProvider = emailProvider; 
     _membershipProvider = membershipProvider; 
     _authenicationProvider = authenicationProvider; 
    } 

    [AllowAnonymous] 
    [HttpGet] 
    ////[OutputCache(Duration = 3600, VaryByParam = "none")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [AllowAnonymous] 
    [HttpPost] 
    [ValidateHttpAntiForgeryToken] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (Request.IsAuthenticated) 
     { 
      return RedirectToAction("Index", "Home"); 
     } 

     if (ModelState.IsValid) 
     { 
      if (_membershipProvider.ValidateUser(model.Username, model.Password)) 
      { 
       _authenicationProvider.AuthenticateUser(model.Username); 
       ////this.HttpContext.User = new GenericPrincipal(new GenericIdentity(model.Username), null); 

       if (!string.IsNullOrEmpty(returnUrl)) 
       { 
        if (Url.IsLocalUrl(returnUrl)) 
        { 
         return Redirect(returnUrl); 
        } 
        else 
        { 
         _logService.Log(new SecurityException(string.Format("Open redirect to {0} detected (Username {1})", returnUrl, model.Username))); 
         return View("Index", model); 
        } 
       } 
       else 
       { 
        return RedirectToAction("Index", "Home"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError(string.Empty, Resources.Controller.View.Authentication.Index.IncorrectUsernamePassword); 
      } 
     } 

     return View("Index", model); 
    } 

    [AllowAnonymous] 
    [HttpPost] 
    [ValidateHttpAntiForgeryToken] 
    public ActionResult ForgotPassword(LoginModel model) 
    { 
     if (ModelState.IsValidField("Username")) 
     { 
      if (!_membershipProvider.EnablePasswordRetrieval) 
      { 
       throw new Exception(Resources.Controller.View.Authentication.Index.PasswordRetreivalNotAllowed); 
      } 

      IMembershipUser user = _membershipProvider.FindUsersByName(model.Username).FirstOrDefault(); 

      if (user != null) 
      { 
       try 
       { 
        _emailProvider.Send(ConfigurationHelper.GetSmtpSettings().Smtp.From, user.EmailAddress, Resources.Global.PasswordRecoveryEmailSubject, user.GeneratePasswordRetreivalEmail()); 
        ModelState.AddModelSuccess(Resources.Controller.View.Authentication.Index.PasswordSentViaEmail); 
       } 
       catch (Exception ex) 
       { 
        _logService.Log(ex); 
        ModelState.AddModelError(string.Empty, Resources.Controller.View.Authentication.Index.UnableToRetreivePassword); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError(string.Empty, Resources.Controller.View.Authentication.Index.EmailAddressDoesNotExist); 
      } 
     } 

     ViewBag.ShowForgottenPasswordForm = "true"; 

     return View("Index", model); 
    } 

    [HttpGet] 
    public ActionResult Logout() 
    { 
     _authenicationProvider.Logout(); 
     ModelState.AddModelInformation(Resources.Controller.View.Authentication.Index.Logout); 
     return View("Index"); 
    } 
} 

我的HomeController如下所示:

public class HomeController : Controller 
{ 
    private IMembershipProvider _membershipProvider; 
    private IAuthenticationProvider _authenticationProvider; 

    public HomeController(IMembershipProvider membershipProvider, IAuthenticationProvider authenticationProvider) 
    { 
     _membershipProvider = membershipProvider; 
     _authenticationProvider = authenticationProvider; 
    } 

    public ActionResult Index() 
    { 
     return View(_membershipProvider.GetCurrentUser()); 
    } 
} 

見下面我RouteConfig:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}", 
      defaults: new { controller = "Authentication", action = "Index" }); 
    } 
} 

RouteDebugger返回TRUE的路線{控制器}/{行動}和{*包羅萬象}並確認AppRelativeCurrentExecutionFilePath爲:〜/主頁

我已經調試代碼我可以成功調試並進入HomeController構造函數和Index操作方法。我也一直能夠步入「〜/查看/主頁/ Index.cshtml」但它拋出異常的代碼行:

<span class="username">@Model.UserName</span> 

有趣的是,在我踏進這個代碼,我可以添加「@ Model.UserName」到我的手錶列表中,我可以看到對象及其屬性,但由於某種原因,它在進入或通過這行代碼時會引發異常。

如果調試器步入HomeController,Index操作方法和Index視圖,那麼爲什麼它突然拋出異常,無法找到路徑「〜/ Home」的HomeController?

捕獲的提琴手數據可以在下面的鏈接中找到:http://d-h.st/IqV

我用剃刀生成編譯我的觀點,我也用Ninject.Mvc來解決我的控制器。還值得一提的是我已清理並重新生成編譯的視圖,並且我的項目不包含任何註冊區域。

任何想法的?這可能是簡單的或明顯的,但我是MVC的新手,正在閱讀/學習。

感謝

+1

你可以顯示路由和你的家庭控制器類的初始化? – 2013-05-08 15:55:46

+0

你可以發佈HomeController的代碼嗎? – christiandev 2013-05-08 15:57:16

+0

在問題中添加缺少的信息,希望這是好的。 – Dungimon 2013-05-08 16:03:24

回答

6

所以,人們可以看到這個問題,在這裏回答就是爲什麼它被拋出異常,我怎麼固定它:

的異常被拋出,因爲在HomeController的下面的代碼行索引視圖:

<a href="@Html.Action("Log Out","Logout", "Authentication")"><i class="icon-key"></i> Log Out</a> 

正如你可以看到它的傳遞錯誤的論點和「退出」正在傳遞的動作名稱時INFACT這應該是「註銷」。我把它糾正以下和它的工作:

<a href="@Html.Action("Logout", "Authentication")"><i class="icon-key"></i> Log Out</a> 

所以,如果你得到這個例外,像我不明白爲什麼那麼請確保你檢查你的代碼的其餘部分在您的視圖,以確保它是正確的。在這種情況下,框架沒有提供意義異常消息和堆棧跟蹤。

相關問題