这是我的第一个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
答案 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
登录发布方法?