【发布时间】:2012-11-28 23:05:05
【问题描述】:
我是 Orchard CMS 的新手。如果有任何错误,我需要向管理员创建电子邮件通知。我制作了一个自定义模块,因此它会向管理员发送电子邮件。另外,我已经从错误页面重定向到模块。
这是我在自定义主题中NotFound.cshtml 中的代码
<script type="text/javascript" language="javascript">
function ToError() {
window.location.href = '/FourOFour?LastURL=' +
(window.location.host + window.location.pathname);
}
window.onload = ToError;
</script>
这是我创建的模块中的自定义路由
new RouteDescriptor {
Priority = 11,
Route = new Route(
"FourOFour",
new RouteValueDictionary {
{"area", "Prenagen.ErrorEmailing"},
{"controller","Utama"},
{"action","Error404"}
},
new RouteValueDictionary(),
new RouteValueDictionary{
{"area", "Prenagen.ErrorEmailing"}
},
new MvcRouteHandler())
}
所以未找到的页面将重定向到/FourOFour。当我在 localhost 中测试它时,一切正常。我键入一个不存在的页面,然后它重定向到NotFound,然后重定向到/FourOFour?LastURL=page。并且电子邮件被发送给管理员。当我将它发布到服务器时,未找到重定向到 FourOFour,但未找到该页面。我该如何解决这个问题?请任何人帮助我。
编辑:它创建了一个无限循环,因为找不到FourOFour,它不断重定向到同一页面。
【问题讨论】:
-
也许你没有启用你的模块?
-
@BertrandLeRoy 该模块已在本地和服务器中启用。但是,FourOFour 页面仍然返回
Not Found。视图也不是问题,因为我已经在自定义主题和模块中创建了视图。 -
您能否确认“Prenagen.ErrorEmailing”是您的项目名称、module.txt 中的模块名称以及modules 文件夹中包含您的模块的文件夹名称?如果我不让这些事情保持一致,我似乎会遇到麻烦。
-
一些与提出的问题没有直接关系但代码引发的评论...重定向 404 是一个坏主意:用户无法查看他输入的 url 并自我纠正.在 Javascript 中重定向是一个坏主意:它不适用于没有 JS 的客户端,而服务器重定向工作得很好,那何必呢?最后,我想知道 Orchard 使用的日志库 Log4Net 是否无法原生捕获 404 并通过一些配置修改发送电子邮件。
-
@BrandonJoyce 是的,它是项目和模块的名称,在
module.txt文件中是这样描述的。 @BertrandLeRoy,所以如果有任何 404 错误,我可以重定向到某个位置?怎么做?如果可以的话,我一定会选择那种方式。