MVC帐户控制器错误和LogOff无法正常工作

时间:2014-10-11 19:24:46

标签: sql asp.net-mvc account

这是我的第一个MVC项目,所以我学到了很多东西。现在我收到一个错误,我无法弄清楚它来自哪里。我使用默认帐户控制器并将其指向我自己的sql数据库,如下所示。我在每个控制器上都放置了[Authorize]属性,因此只能访问登录页面。一旦用户登录,它将允许他们访问所有页面,但首先它会重定向到此错误:

错误。 处理您的请求时出错。

此外,更改帐户控制器后,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");
    }

这是堆栈跟踪

'/'应用程序中的服务器错误。你调用的对象是空的。描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。

来源错误:

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

堆栈追踪:

[NullReferenceException:对象引用未设置为对象的实例。] c:\ Merlin \ Customers \ Weir \ Git \ siNetWebApplication \ siNetWebApplication \ Controllers \中的siNetWebApplication.Controllers.DashboardController.Index(String startDate,String endDate) 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.Web.Mvc.Async.WrappedAsyncResult2.CallEndDelegate(IAsyncResult asyncResult)+138 System.Web.Mvc.Async .AsyncInvocationWithFilters.b__3c()+111 System.Web.Mvc.Async。&lt;&gt; c__DisplayClass45.b__3e()+ 452 System.Web.Mvc.Async。&lt;&gt; c__DisplayClass30.b__2f( IAsyncResult asyncResult)+15 System.Web.Mvc.Async。&lt;&gt; c__DisplayClass28.b__19()+37 System.Web.Mvc.Async。&lt;&gt; 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 step,Boolean&amp; completedSynchronously)+288

3 个答案:

答案 0 :(得分:1)

您很可能没有将防伪令牌传递给LogOff操作。

您已在操作中获得[ValidateAntiForgeryToken]属性,因此您需要传递此信息,否则您将收到错误消息。如果您关闭自定义错误,@ sanjeev提到您可能会看到有关防伪标记未被传递的错误。

将其添加到视图中的表单

@Html.AntiForgeryToken()

答案 1 :(得分:0)

您提到登录时遇到“错误。处理您的请求时出错。”然后一切正常。似乎“错误。处理您的请求时出错。”来自/Views/Shared/Error.cshtml页面。只需确保/ Dashboard / Index是您应用程序的有效URL。

您需要关闭web.config中的自定义错误以获取该错误的实际原因。这也有助于您解决注销问题。

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

答案 2 :(得分:0)

您是否可以删除async Task<ActionResult>并使用ActionResult登录发布方法?