【问题标题】:async task controller not redirecting to action异步任务控制器未重定向到操作
【发布时间】:2020-04-01 15:34:28
【问题描述】:

我有一个名为 Upload 的异步任务操作控制器,它允许用户上传 PDF 文件。处理 PDF 文件并将信息存储在 db 中。控制器处理完 PDF 后,我需要将其重定向到确认视图。目前上传控制器完成后,我没有服务器,例如404 错误等,它只是重定向到相同的上传视图,而不是确认视图

谁能告诉我为什么?我很确定它与异步任务有关,也许异步任务需要以不同的方式重定向?

我在 CompletedCamps 控制器中的上传和确认操作

        public ActionResult Upload(int? id)
        {
            CompletedCamp completedCamp = db.CompletedCamps.Find(id);
            return View(completedCamp);
        }

        [HttpPost]
        public async Task<ActionResult> Upload(HttpPostedFileBase file, int? id)
        {
            CompletedCamp completedCamp = db.CompletedCamps.Find(id);

            string filename = Guid.NewGuid() + Path.GetExtension(file.FileName);
            string filepath = Server.MapPath(Path.Combine("~/Surveys/", filename));
            file.SaveAs(filepath);

            completedCamp.SurveyName = filename;
            db.SaveChanges();

            await AzureVisionAPI.ExtractToTextFile(filepath);
            ParseSurveyText parse1 = new ParseSurveyText();
            await Task.Run(() => parse1.ParseTextFile(completedCamp.RollNumber, completedCamp.OfficialSchoolName, completedCamp.Date, filepath));

            return RedirectToAction("Confirmation", "CompletedCamps", new { id = id });
        }

        [HttpGet]
        public ActionResult Confirmation(int? id)
        {
            var camp = db.CompletedCamps.FirstOrDefault(c => c.Id == id);
            return View(camp);
        }

【问题讨论】:

  • 您的控制器名称是“CompletedCamps”吗?
  • 肯定是:“公共类 CompletedCampsController : Controller”。我没有收到服务器错误.. 没有 404 什么都没有。它只是返回相同的上传视图
  • 如果您想重定向到确认控制器,您应该将“CompletedCamps”更改为“确认”
  • return RedirectToAction("Confirmation", "Confirmation", new { id = id }); 请测试这部分而不是您的代码。
  • 如果您注释掉您的帖子上传方法栏的内容,重定向的行为是否相同?

标签: c# asp.net asp.net-mvc asynchronous async-await


【解决方案1】:

如果您想重定向到Confirmation ControllerConfirmation Action,请测试此代码, 而不是

return RedirectToAction("Confirmation", "CompletedCamps", new { id = id });

使用此代码

return RedirectToAction("Confirmation", "Confirmation", new { id = id });

【讨论】:

  • 控制器名称为 CompletedCamps。动作名称是上传和确认
  • RedirectToAction( ActionName ,ControllerName,new {id=id})中的异步操作没有区别
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
相关资源
最近更新 更多