用户注册使用异步控制器的用户注册错误

时间:2015-08-26 10:34:43

标签: asynchronous asp.net-mvc-5 entity-framework-6 asp.net-identity

我使用Microsoft MVC的身份验证模板进行了简单的项目。在开发机器和IIS Express上调试时,我可以创建一个新用户,我可以使用其默认控制器登录,但是当我尝试在IIS上发布它时,我会在注册过程中捕获一个空引用异常。这是stacktrace:

    [NullReferenceException: Object reference not set to an instance of an    object.]
        TrabahoNow.Web.Controllers.<Register>d__8.MoveNext() +224
        System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) +93
        System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +52
        System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) +84
        System.Web.Mvc.Async.<>c__DisplayClass37. <BeginInvokeAsynchronousActionMethod>b__36(IAsyncResult asyncResult) +17
        System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult  asyncResult) +10
        System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
        System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +32
        System.Web.Mvc.Async.AsyncInvocationWithFilters.   <InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +50
        System.Web.Mvc.Async.<>c__DisplayClass46.  <InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +225
        System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +10
        System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
        System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
        System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +34
        System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +26
        System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
        System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
        System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
        System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
        System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
        System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
        System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54
        System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +39
        System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
        System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +28
        System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54
        System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +29
        System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
        System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
        System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
        System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +54
        System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +31
        System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
        System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9651796
        System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

我不知道是什么导致它因为它在快递上运行。这是我的控制器动作:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser()
            {
                UserName = model.Email,
                FirstName = model.FirstName.ToUpper(),
                LastName = model.LastName.ToUpper(),
                MiddleName = model.MiddleName.ToUpper(),
                Email = model.Email,
                PhoneNumber = model.Phone,
                DesiredPosition = model.DesiredPosition,
                BirthDate = DateTime.Now,


            };

            var result = await UserManager.CreateAsync(user, model.Password);

            if (result.Succeeded)
            {
                   await SignInAsync(user, isPersistent: false);
                    return RedirectToAction("Index", "Home");                    

            }
            else
            {
                AddErrors(result);
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

在IIS服务器中失败。有人可以帮我解决这个问题吗?

这是我的设置..

.NET 4.5.1

EF 6.0

MVC 5

1 个答案:

答案 0 :(得分:0)

鉴于您有例外情况,并确认在构建ApplicationUser类的实例时发生错误,您的问题极有可能是model.FirstNamemodel.LastNamemodel.MiddleName为空。

ToUpper()的调用将是您例外的根本原因。

检查null:

FirstName = string.IsNullOrEmpty(model.FirstName) ? null : model.FirstName

或者,如果您可以使用C#6,请使用空传播运算符:

FirstName = model.FirstName?.ToUpper();