【问题标题】:Where in MVC 4 Razor would I replicate code that executes in the ASPX OnLoad event?在 MVC 4 Razor 中,我将在哪里复制在 ASPX OnLoad 事件中执行的代码?
【发布时间】:2013-06-17 01:53:19
【问题描述】:

在 ASPX 项目中,我现在正在转换为 MVC 4 Razor,自定义 404 错误页面在 OnLoad 事件中执行了几行代码,但我对 MVC razor 平台的理解不再存在,所以我不是确定我会在哪里运行这段代码。

这是我的 ASPX 页面中的代码,我想将其转换为处理 404 事件的剃须刀页面。

protected override void OnLoad(EventArgs e)
{
    Response.TrySkipIisCustomErrors = true;
    Response.Status = "404 Not FOund";
    Response.StatusCode = 404;
    base.OnLoad(e);
}

【问题讨论】:

  • 当您将 WebForms 应用程序转换为 MVC 时,您不能只是逐行转换,您还必须转换概念。你想用这段代码做什么?在 MVC 中可能有不同的方法。
  • 请停止以“网络表单”的方式思考。 MVC 是一个完全不同的野兽。它不是基于事件的编程方式。改变主意!

标签: asp.net-mvc-4


【解决方案1】:

试试这个...

public ActionResult Index() {        
    throw new HttpException(404, "Page Not Found");
}

编辑,这可能更适合您的情况。

public ActionResult Index() { 
    return new HttpStatusCodeResult(HttpStatusCode.NotFound, "Page Not Found");
}

这个讨论有更好的解释:https://stackoverflow.com/a/4985562/193634

【讨论】:

  • 嗨,我现在不在我的电脑旁,无法测试..但是你可以尝试将代码放在你的 Razor 视图中吗?请参阅上面的新代码示例。
  • 这是设计使然。实际的 404 仅针对完全未处理的 URL 或物理上不存在的文件发送。来自操作的 404 仍然返回代码 200,仅带有文本“未找到”错误。这是因为几乎每个浏览器都会劫持 404 错误并显示自己的错误页面。为了保持用户体验一致,网站返回一个带有文本错误消息的正常页面。要强制 404,您需要手动设置 HTTP 状态,而不是简单地抛出 HttpException。
  • 您链接的 SO 帖子将我带到了这个 blogs.microsoft.co.il/blogs/shay/archive/2009/03/06/…,这看起来就是我想要的。
  • 很高兴你找到了你要找的东西。
【解决方案2】:

这是为我设置 404:

public ActionResult Index() {
  Response.Status = "404 Not Found";
  Response.StatusCode = 404;
  return null;
}

【讨论】:

  • 你的控制器应该返回一个动作。返回 HttpStatusCodeResult 是要走的路。
猜你喜欢
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 2016-11-10
  • 1970-01-01
  • 2018-10-23
  • 2017-09-20
相关资源
最近更新 更多