这是我的第一个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:对象引用未设置为对象的实例。siNetWebApplication.Controllers.DashboardController.Index(String System.Web.Mvc.Async.AsyncControllerActionInvoker.b__36(IAsyncResult,System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext endDate) +178 System.Web.Mvc.Async.AsyncControllerActionInvoker.b__36(IAsyncResult controllerContext,IDictionary2 parameters) +241 System.Web.Mvc.Async.AsyncControllerActionInvoker.b__36(IAsyncResult startDate,ActionDescriptor actionDescriptor,IDictionary2 parameters) +38 Closure asyncResult,ActionInvocation innerInvokeState) +11 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 System.Web.Mvc.Async.<>c__DisplayClass1e.b__1b(IAsyncResult ) +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,System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +29 System.Web.Mvc.Async.WrappedAsyncVoid1.CallEndDelegate(IAsyncResult asyncResult) +111 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() asyncResult +19 System.Web.Mvc.MvcHandler.b__4(IAsyncResult asyncResult,ProcessRequestState innerState) +51 Boolean asyncResult) +111 System.Web.HttpApplication.ExecuteStep(IExecutionStep +606 Boolean ProcessRequestState innerState) +288
发布于 2014-10-12 05:22:46
您很可能没有将防伪造令牌传递给LogOff操作。
您已经在操作上获得了[ValidateAntiForgeryToken]
属性,因此您需要传递此属性,否则您将得到一个错误。如果您关闭自定义错误,正如@sanjeev所提到的,您可能会看到关于未传递防伪造令牌的错误。
将此代码添加到视图中的表单中
@Html.AntiForgeryToken()
发布于 2014-10-12 05:06:02
您提到在登录时会收到“错误。处理您的请求时出错”。然后一切都会好起来。似乎是“错误。处理您的请求时出现错误。”来自/Views/Shared/Error.cshtml
页面。只需确保/Dashboard/Index是您的应用程序的有效url。
您需要关闭web.config中的自定义错误,以了解该错误的实际原因。这也将帮助您解决注销问题。
<system.web>
<customErrors mode="Off" />
</system.web>
发布于 2014-10-12 21:34:33
您可以删除async Task<ActionResult>
并使用ActionResult
作为登录post方法吗?
https://stackoverflow.com/questions/26318395
复制相似问题