【问题标题】:How to throw 404 in DotNetNuke module如何在 DotNetNuke 模块中抛出 404
【发布时间】:2012-03-13 16:52:40
【问题描述】:

我想从我的模块中抛出一个 404 file not found 异常,但是每个异常都被 DNN 捕获并且没有显示我的 404.aspx 页面(仅来自 DNN 的错误页面)。

在我的 web.config 中我添加了:

<httpErrors errorMode="Custom" defaultResponseMode="File">
  <remove statusCode="404" />
  <error statusCode="404" prefixLanguageFilePath="" path="/404.aspx" responseMode="ExecuteURL" />
</httpErrors>

&

<customErrors mode="On">
  <error statusCode="404" redirect="~/404.aspx" />
</customErrors>

打开不存在的页面时效果很好。但是尝试对我的模块做同样的事情并没有给我同样的结果......

我尝试了以下方法但没有成功:

throw new HttpException(404, "Not Found");

【问题讨论】:

  • 我无法弄清楚为什么您希望模块抛出 404?该模块是否专门设计为页面上的唯一内容?
  • 是的。我正在为我的网站开发一个模块,当用户做了一些奇怪的事情时,我只想显示一个 404(这是我的 404 页面)。

标签: c#-4.0 dotnetnuke dotnetnuke-module dotnetnuke-6


【解决方案1】:

这样做:

Response.StatusCode = 404;
Response.End(); 

【讨论】:

  • 试过了,没用。 DNN 显然覆盖了这一点,并且对此不做任何事情。
【解决方案2】:

DNN 的简单解决方案

TabInfo errorPage404 = new TabController().GetTabByName("404 Error Page", this.PortalId);
Response.Redirect(DotNetNuke.Common.Globals.NavigateURL(errorPage404.TabID));

【讨论】:

  • 谢谢。这是迄今为止最好的答案。
【解决方案3】:

也许您需要先明确回复?

Response.Clear();
Response.StatusCode = 404;
Response.End(); 

【讨论】:

  • 这段代码确实有效,但它取决于它何时发生的上下文。在对页面的正常获取请求中,这将导致 404,但是如果这发生在 ajax 回发中的按钮单击事件中,404 仍将从服务器返回,但更新面板将有效地忽略 404 并且它看起来好像用户什么都没发生一样。
  • 我试过这段代码。我的上下文是我在某些条件下检查页面加载。如果它们不匹配,我想抛出 404。
猜你喜欢
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2011-01-09
相关资源
最近更新 更多