几天前我写了this question,虽然我得到了一些赞成,但我没有采取太多行动。这就是为什么我选择以新的方式重新访问这个问题。
我正在尝试将用户发送到我的NotFound
视图,该视图位于我的共享目录中,只要他们请求控制器或不存在的操作。您会在上一个问题中看到我的own answer,这是一个有效的解决方案,但它仍然要求我拥有ErrorController
和/Error/NotFound.vbhtml
视图。我认为这是相当荒谬的,因为我只是从该视图提供静态内容。
我想要做的是从共享目录渲染视图而不需要Controller。这就是我对自定义控制器工厂的想法所在......我只是不知道如何去做。
如何构建一个与默认控制器工厂完全相同的自定义控制器工厂,除非我需要显示NotFound视图(当然保持源URI完整)?
答案 0 :(得分:1)
编写自定义控制器工厂实际上更多工作,而不是使用一个处理404的操作的附加控制器?
如果你有某种GeneralController
处理应用程序范围的功能(如设置或类似功能),那么无论如何这个动作都可以成为它的一部分。
因此。控制器工厂和控制器之间的哪一个:
在过度工程方面,敏捷开发人员应该非常讨厌。
答案 1 :(得分:0)
这应该有很多帮助...
How can I properly handle 404 in ASP.NET MVC?
......我建议你采用这种方法。
我认为你要做的事情很可能与ASP.NET MVC相悖,或者至少会引入一些对你的代码看起来不那么明显的东西。
您可以使用自定义错误来实现您想要的效果。在web.config中你可以做这样的事情......
<customErrors mode="On" >
<error statusCode="404" redirect="~/Views/Shared/NotFound.aspx" />
</customErrors>
...但是因为这个aspx页面位于Views文件夹中,所以你必须进入位于Views文件夹中的web.config并阻止它直接访问视图。
如果此页面(NotFound.aspx)被写为MVC视图,那么您将遇到麻烦。你会发现许多东西(例如,这个。例如)可能没有正确设置。
鉴于您正在访问此文件,就好像它是经典的ASP.NET一样,您可能希望将其编写为经典ASP.NET,并将其置于Views文件夹之外。
最后,您可能希望使用其他重定向模式......
<customErrors mode="On" redirectMode="ResponseRewrite" >
...以便您的404网址是所请求网页的网址。