2014-10-11 2 views
0

Это мой первый проект MVC, поэтому я многому учусь. Сейчас я получаю сообщение об ошибке, и я не могу понять, откуда он. Я взял контроллер учетной записи по умолчанию и указал его на мою собственную базу данных sql, как показано ниже. Я помещаю атрибут [Авторизовать] на каждый контроллер, поэтому доступ к странице входа можно получить только на странице входа. Как только пользователь войдет в систему, он позволит им легко получить доступ ко всем страницам, но сначала перенаправляет на эту ошибку:Ошибка контроллера счета MVC и LogOff не работает

Ошибка. Произошла ошибка при обработке вашего запроса.

Кроме того, после изменения контроллера учетной записи действие LogOff перестало работать. Я изменил его, как показано ниже, но он все еще не работает. Как ни странно, эта ошибка не появлялась вчера. Я близок к крайнему сроку в этом проекте, поэтому любая помощь будет принята с благодарностью, спасибо!

Здесь измененная учетная запись код контроллера

// 
    // GET: /Account/Login 
    [AllowAnonymous] 
    public ActionResult Login(string returnUrl) 
    { 
     ViewBag.ReturnUrl = returnUrl; 
     return View(); 
    } 

    // 
    // POST: /Account/Login 
    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      using (ixdb_siNet_ConfigurationEntities userdb = new ixdb_siNet_ConfigurationEntities()) 
      { 
       var objUser = userdb.ixoc_Users.FirstOrDefault(x => x.name == model.UserName && x.password == model.Password); 
       if (objUser != null) 
       { 
        FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
        { 
         return Redirect(returnUrl); 
        } 
        else 
        { 
         return RedirectToAction("Index", "Dashboard"); 
        } 
       } 
      } 
     } 
     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

    // 
    // POST: /Account/LogOff 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult LogOff() 
    { 
     //AuthenticationManager.SignOut(); 
     Request.Cookies.Remove("UserId"); 
     FormsAuthentication.SignOut(); 
     return RedirectToAction("Index", "Dashboard"); 
    } 

Вот трассировки стека

Ошибка сервера в приложении '/'. В экземпляре объекта не задана ссылка на объект. Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

Сведения об исключении: System.NullReferenceException: Ссылка на объект не установлена ​​в экземпляр объекта.

Источник ошибки:

Необработанное исключение при выполнении текущего веб-запроса. Информация о происхождении и местоположении исключения может быть идентифицирована с использованием следа стека исключений ниже.

Трассировка стека:

[NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.] SiNetWebApplication.Controllers.DashboardController.Index (String StartDate, String EndDate) в C: \ \ Merlin Клиенты \ \ Weir Git \ siNetWebApplication \ siNetWebApplication \ Controllers \ DashboardController.cs: 29 lambda_method (Closure, ControllerBase, Object []) +178 System.Web.Mvc.ReflectedActionDescriptor.Execute (ControllerContext controllerContext, IDictionary2 parameters) +241 System.Web.Mvc.ControllerActionInvoker .InvokeActionMethod (ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2) +38 System.Web.Mvc.Async.AsyncControllerActionInvoker.b__36 (IAsyncResult asyncResult, ActionInvocation innerInvokeState) +11 System.W eb.Mvc.Async.WrappedAsyncResult2.CallEndDelegate (IAsyncResult asyncResult) +138 System.Web.Mvc.Async.AsyncInvocationWithFilters.b__3c() +111 System.Web.Mvc.Async. <> c__DisplayClass45.b__3e() +452 System.Web.Mvc.Async. <> c__DisplayClass30.b__2f (IAsyncResult asyncResult) +15 System.Web.Mvc.Async. <> c__DisplayClass28.b__19() +37 System.Web.Mvc.Async. <> c__DisplayClass1e.b__1b (IAsyncResult asyncResult) +241 System.Web.Mvc.Controller.b__1d (IAsyncResult asyncResult, ExecuteCoreState innerState) +29 System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate (IAsyncResult asyncResult) +111 System.Web. Mvc.Controller.EndExecuteCore (IAsyncResult asyncResult) +53 System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate (IAsyncResult asyncResult) +19 System.Web.Mvc.MvcHandler.b__4 (IAsyncResult asyncResult, ProcessRequestState innerState) +51 System.Web. Mvc.Async.WrappedAsyncVoid1.CallEndDelegate (IAsyncResult asyncResult) +111 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, Boolean & завершен синхронно) +288

+0

Можете ли вы поделиться тем исключением, которое вы получаете, вместо общего сообщения об ошибке? Попробуйте выполнить свой код с помощью отладчика и посмотрите, можете ли вы точно определить, где именно происходит ошибка. – Tobias

+0

Это не происходит в режиме отладки, только после того, как я скопирую его на сервер IIS и просмотрю его в Интернете. – spacecowboy

+0

Какую версию MVC вы используете? – nityan

ответ

0

Вы упомянули, что когда вы входите в систему, вы получаете сообщение «Ошибка. Ошибка при обработке вашего запроса». и тогда все работает нормально. Кажется, что «Ошибка. Ошибка при обработке вашего запроса». есть от /Views/Shared/Error.cshtml страница. Просто убедитесь, что/Dashboard/Index действителен для вашего приложения.

Вам необходимо отключить пользовательские ошибки в web.config, чтобы получить фактическую причину этой ошибки. Это поможет вам решить проблему с выпуском.

<system.web> 
    <customErrors mode="Off" /> 
</system.web> 
+0

Да, он отображает Views/Shared/Error.cshtml и/Dashboard/Index определенно действителен. Я могу щелкнуть по нему со страницы ошибки. Спасибо, я попробую отключить пользовательские ошибки и посмотреть, что произойдет ... – spacecowboy

+0

попробуйте установить в web.config, чтобы увидеть фактическую ошибку. – sanjeev

1

Вы, скорее всего, не передадите токен анти-подделки в действие LogOff.

У вас есть атрибут [ValidateAntiForgeryToken], поэтому вам необходимо пройти это, иначе вы получите сообщение об ошибке. Если вы отклоняете пользовательские ошибки, как упоминал @sanjeev, вы, вероятно, увидите ошибку, пропущенную против токена анти-подделки.

Добавьте к этому форму, на ваш взгляд

@Html.AntiForgeryToken() 
+0

Спасибо @heymega logout начал работать, когда я протестировал его, но я все еще получаю ошибку входа. Кстати, где находится форма выхода, которая вызывается с Log out? – spacecowboy

+0

Вы отключили пользовательские ошибки, чтобы увидеть фактическое сообщение об ошибке? Форма выхода имеет идентификатор logoutform, поэтому вы можете легко найти его. – heymega

0

Вы можете удалить async Task<ActionResult> и использовать ActionResult для метода Войти пост?

Смежные вопросы