在Asp.Net Core中忽略RedirectToAction

时间:2018-02-27 10:58:10

标签: c# asp.net-mvc asp.net-core-mvc

我正在asp.net核心开发一个crud应用程序,在我使用RedirectToAction添加记录后添加ActionResult然后它不会重定向到该动作。

当请求是GET时它确实重定向,但是在POST的情况下它没有。

以下是我的代码:

public IActionResult Add(AuditSchedules model)
    {
        try
        {
            int ScheduleID;
            int TotalDays;
            DateTime start;
            List<SelectListItem> li = new List<SelectListItem>();
            TempData["state"] = util.Get_State();
            TempData["branch"] = li;
            TempData["Catg"] = ctx.CategoryMaster.Select(x => new SelectListItem { Text = x.CategoryName, Value = x.CategoryId.ToString() }).ToList();
            int count = 0;
            if (HttpContext.Request.Method == "POST")
            {
                using (var ctx = new QuestionnaireEntities())
                {
                    count = ctx.AuditSchedules.Where(x => (x.State == model.State) &&
                                                            (x.Branch == model.Branch) &&
                                                             (x.StaffId == model.StaffId) &&
                                                              (x.FromDate == model.FromDate)).Count();
                }
                if (count <= 0)
                {
                    TotalDays = (int)(model.ToDate.Subtract(model.FromDate)).TotalDays + 1;
                    start = model.FromDate;
                    model.CreatedBy = HttpContext.Session.GetString("UserName");
                    model.Icon = util.GetIcon(model.CategoryId);
                    model.CreatedDate = DateTime.Now;
                    model.IsCompleted = "N";
                    using (var ctx = new QuestionnaireEntities())
                    {
                        ctx.AuditSchedules.Add(model);
                        //ctx.SaveChanges();
                        ScheduleID = model.ScheduleId;
                        for (int i = 0; i < TotalDays; i++)
                        {
                            AuditSubSchedule subModel = new AuditSubSchedule();
                            subModel.ScheduleId = ScheduleID;
                            subModel.ScheduleDate = start;
                            ctx.AuditSubSchedule.Add(subModel);
                            //ctx.SaveChanges();
                            start.AddDays(1);
                        }
                    }
                    TempData["Msg"] = "Schedule For " + model.StaffName + " Created Successfully";
                    return RedirectToAction("Index", "Schedules");
                }
                else
                {
                    TempData["Msg"] = "Schedule AllReady Exist , Try a Different Combination <br> [ Hint : Different State , Branch , StaffID , Fromdate]";
                    return RedirectToAction("Index", "Schedules");
                }
            }
        }
        catch (Exception ex)
        {
            logger.LogError(ex);
        }
        finally
        {

        }
      return View(model);
    }

添加记录后我使用返回RedirectToAction(&#34;索引&#34;,&#34;计划&#34;);  但它什么都没做。当请求是Get类型而不是它运行良好时,但是当我将模型发布到它而不是重定向时。

事实上它在MVC5中运行良好(无论是GET请求还是POST) 如何在ASP.Net Core中重定向?

更新一个 在Post Network Tab响应之前 enter image description here

发布网络标签响应后

enter image description here

更新两个

enter image description here

enter image description here

在网络日志中,添加的位置显示未找到,

1 个答案:

答案 0 :(得分:3)

您对TempData的使用,以及ASP.NET核心defaults使用CookieTempDataProvider这一事实是您遇到问题的原因。

基本上,您正在尝试将大型对象序列化为cookie。生成的Cookie为too large - 结果为500(由于return RedirectToAction("Index", "Schedules");调用 执行正常,因此非常难以诊断 - 因为RedirectToAction调用出现。 / p>

因此,TempData是一个红鲱鱼 - 它是无关的。对TempData["Catg"] = ctx.CategoryMaster.Select(x => new SelectListItem { Text = x.CategoryName, Value = x.CategoryId.ToString() }).ToList(); 的多次分配是真正的原因 - 可能主要是这一个:

ITempDataProvider

您可能希望使用其他SessionStateTempDataProvider实施(例如TempData)。 或完全避免CookieTempDataProvider

MVC5不会发生此问题,因为它不使用apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-resource annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-redirect: "false" spec: rules: - host: test.demo.com http: paths: - path: /path1 backend: serviceName: s1 servicePort: 8080 - path: /path2 backend: serviceName: s1 servicePort: 8080 - path: /path3 backend: serviceName: s2 servicePort: 80 - host: demo.test.com http: paths: - backend: serviceName: s2 servicePort: 80