我已经在互联网上搜索了高低,并检查了所有以前回答过的问题并且标题相同,我无法想出这个问题.
我从我的身份验证控制器中的action方法返回RedirectToAction("Index","Home"),然后收到以下异常:
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.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. b__22(IAsyncResult asyncResult) +838644 System.Web.Mvc.<>c__DisplayClass1d. b__18(IAsyncResult asyncResult) +28 System.Web.Mvc.Async.<>c__DisplayClass4. b__3(IAsyncResult ar) +15 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +65 System.Web.Mvc.Async.<>c__DisplayClass4. b__3(IAsyncResult ar) +15 System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +51 System.Web.Mvc.<>c__DisplayClass8. b__3(IAsyncResult asyncResult) +42 System.Web.Mvc.Async.<>c__DisplayClass4. 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为路由{controller}/{action}和{*catchall}返回TRUE,并确认AppRelativeCurrentExecutionFilePath为:〜/ Home
我调试了代码,我可以成功调试并进入HomeController构造函数和Index操作方法.我也可以进入"〜/ Views/Home/Index.cshtml"但是它会在代码行抛出异常:
@Model.UserName
有趣的是,在我进入这段代码之前,我可以将"@ Model.UserName"添加到我的手表列表中,我可以看到对象及其属性很好,但由于某种原因,它在进入或超过此行时抛出异常码.
如果调试器进入HomeController,Index动作方法和Index视图,那么为什么它突然抛出异常它无法找到路径为"〜/ Home"的HomeController?
捕获的fiddler数据可以在以下链接中找到:http://dh.st/IqV
我使用Razor Generator编译我的视图,我也使用Ninject.Mvc来解析我的控制器.还值得一提的是我已经清理并重新生成了编译的视图,我的项目不包含任何注册区域.
有任何想法吗?这可能很简单或者很明显,但我是MVC的新手,我正在阅读/学习.
谢谢
所以人们可以看到这里回答的问题是为什么它抛出异常以及我如何修复它:
由于HomeController索引视图中的以下代码行而抛出异常:
Log Out
你可以看到它传递了错误的参数,并且"Log Out"作为动作名称被传入,而实际上这应该是"Logout".我纠正了以下内容并且它有效:
Log Out
因此,如果您收到此异常并且像我一样无法理解为什么那么请确保在视图中检查其余代码以确保其正确无误.在这种情况下,框架不提供含义异常消息和堆栈跟踪.