处理您的请求时发生错误。MVC 4。

7

我正在创建一个MVC 4应用程序,遇到了以下错误。

enter image description here

我尝试了很多方法,但是找不到问题所在。这里是我的控制器源代码:

    public ActionResult Index(string EventId)
    {

        HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies["User"];

        if (cookie != null)
        {
            string Type = (cookie["Type"] == null || cookie["Type"] == "") ? null : cookie["Type"].ToString();
            string Username = (cookie["Username"] == null || cookie["Username"] == "") ? null : cookie["Username"].ToString();
            ViewBag.Message = Type;
            ViewBag.Username = Username;


            try
            {
                string ReplaceEventID = EventId.Replace('-', '/');

                ViewBag.Message = ReplaceEventID;
                IEnumerable<Job> JobListRelatedToEvent = DBContext.Jobs.Where(x => x.EventId == ReplaceEventID);
                return View(JobListRelatedToEvent);
            }
            catch
            {
                return View();
            }
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }

更新: 在我的本地机器上运行时,它可以正常工作,但是当我将其发布到服务器上时,出现了这个错误。

有人能告诉我问题出在哪里吗?


1
我对MVC没有太多经验,但是你不是在重定向到同一个Action,从而陷入了循环吗? - nphx
1
你尝试过调试你的操作方法吗?如果没有,请进行调试,如果出现任何异常,请在此处发布。 - Mukesh Modhvadiya
1
我忘了提到一些事情,我会更新。 - Harshana Narangoda
2
在我的本地机器上它运行得很好,但是当我发布到服务器后就出现了这个错误。 - Harshana Narangoda
1
我建议您在此检索并粘贴服务器事件日志。目前没有任何线索表明出了什么问题。 - qamar
我会怀疑这是竞态条件。我的猜测是DBContext是一个已关闭的连接异常。这是因为在这两行之间,您的上下文已关闭,然后枚举列表。IEnumerable<Job> JobListRelatedToEvent = DBContext.Jobs.Where(x => x.EventId == ReplaceEventID); //return View(JobListRelatedToEvent); throw;<customErrors mode="Off" /> 这样可以将异常暴露给浏览器,以便您可以向前迈进一步。 - muglio
3个回答

25
我面临同样的问题,如果启用自定义错误功能,则会出现此问题。
您需要对web.config进行更改,并添加以下代码。 这样,您将获得应用程序或代码级别的实际错误。
<system.web>
      <customErrors mode="Off" />

现在,不再显示IIS的通用页面,而是显示错误信息。


这真的很有帮助,可以在服务器上看到实际的错误。 - sgtcadet

0

我不知道这是否能帮到你,但我遇到了一个问题,即POST操作有[RequireHttps],但GET没有。这对我造成了问题。因此,请检查您是否对一个动词有限制而对另一个动词没有限制,特别是在表单提交方面。

这个问题直到我发布到生产环境才出现,因为DEBUG指令删除了[RequireHttps]属性:)


-4

试试这个:

 public ActionResult Job(string EventId)
        {

            HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies["User"];

            if (cookie != null)
            {
                string Type = (cookie["Type"] == null || cookie["Type"] == "") ? null : cookie["Type"].ToString();
                string Username = (cookie["Username"] == null || cookie["Username"] == "") ? null : cookie["Username"].ToString();
                ViewBag.Message = Type;
                ViewBag.Username = Username;


                try
                {
                    string ReplaceEventID = EventId.Replace('-', '/');

                    ViewBag.Message = ReplaceEventID;
                    IEnumerable<Job> JobListRelatedToEvent = DBContext.Jobs.Where(x => x.EventId == ReplaceEventID);
                    return View(JobListRelatedToEvent);
                }
                catch
                {
                    return View();
                }
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
  }

2
为什么?在发布答案时,要说明问题是什么,而不仅仅是发布一段代码块。此外,我唯一能看到的区别是您在代码无法访问的位置添加了一个return View();语句。 - Andy Nichols
请解释一下你的答案在做什么。 - Vikas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接