Asp.net mvc ASP.NET MVC-用于404页的自定义控制器工厂

Asp.net mvc ASP.NET MVC-用于404页的自定义控制器工厂,asp.net-mvc,controller,http-status-code-404,Asp.net Mvc,Controller,Http Status Code 404,几天前我写了一封信,虽然我得到了一些赞成票,但我没有得到多少行动。这就是为什么我选择以一种新的方式重新审视这个问题 每当用户请求不存在的控制器或操作时,我正试图将其发送到我的NotFound视图,该视图位于我的共享目录中。您将在上一个问题中看到我的问题,这是一个可行的解决方案,但是它仍然需要我有一个ErrorController和一个/Error/NotFound.vbhtml视图。我认为这是相当荒谬的,因为我只是从这个角度提供静态内容 我想做的是从共享目录呈现视图,而不需要控制器。这就是我关于

几天前我写了一封信,虽然我得到了一些赞成票,但我没有得到多少行动。这就是为什么我选择以一种新的方式重新审视这个问题

每当用户请求不存在的控制器或操作时,我正试图将其发送到我的
NotFound
视图,该视图位于我的共享目录中。您将在上一个问题中看到我的问题,这是一个可行的解决方案,但是它仍然需要我有一个
ErrorController
和一个
/Error/NotFound.vbhtml
视图。我认为这是相当荒谬的,因为我只是从这个角度提供静态内容

我想做的是从共享目录呈现视图,而不需要控制器。这就是我关于定制控制器工厂的想法的来源。。。我只是不知道该怎么做


如何构建与默认控制器工厂行为完全相同的自定义控制器工厂,除了需要显示NotFound视图(当然要保持源URI的完整性)之外

。。。我建议你采用这种方法

我认为您试图做的很可能与ASP.NET MVC背道而驰,或者至少引入了一些其他人看您的代码时看不到的东西

通过使用自定义错误,您可以实现您想要的结果。在web.config中,您可以执行以下操作

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

。。。但是,由于此aspx页面位于“视图”文件夹中,您必须进入位于“视图”文件夹中的web.config,并阻止它阻止对视图的直接访问

如果这个页面(NotFound.aspx)是作为MVC视图编写的,那么您将遇到麻烦。您会发现很多东西(例如this.Html)可能设置不正确

假设您访问此文件时将其视为经典ASP.NET,您可能希望将其编写为经典ASP.NET,并将其放在“视图”文件夹之外

最后,您可能希望使用不同的重定向模式

<customErrors mode="On" redirectMode="ResponseRewrite" >


。。。因此,您的404 url就是请求页面的url。

这应该会有很大帮助

。。。我建议你采用这种方法

我认为您试图做的很可能与ASP.NET MVC背道而驰,或者至少引入了一些其他人看您的代码时看不到的东西

通过使用自定义错误,您可以实现您想要的结果。在web.config中,您可以执行以下操作

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

。。。但是,由于此aspx页面位于“视图”文件夹中,您必须进入位于“视图”文件夹中的web.config,并阻止它阻止对视图的直接访问

如果这个页面(NotFound.aspx)是作为MVC视图编写的,那么您将遇到麻烦。您会发现很多东西(例如this.Html)可能设置不正确

假设您访问此文件时将其视为经典ASP.NET,您可能希望将其编写为经典ASP.NET,并将其放在“视图”文件夹之外

最后,您可能希望使用不同的重定向模式

<customErrors mode="On" redirectMode="ResponseRewrite" >

。。。因此,您的404 url就是请求页面的url。

我不明白这一点 编写一个定制的控制器工厂不是比拥有一个处理404的操作的附加控制器要多些工作吗

如果您有某种处理应用程序范围功能(如设置或类似功能)的
GeneralController
,此操作也可以是其中的一部分

所以。控制器工厂和控制器之间的哪一个:

  • 开发更耗时
  • 更容易出错
  • 更复杂,
  • 在有bug的情况下影响应用程序的更大表面
当涉及到过度工程时,敏捷开发人员应该非常懒惰。

我不明白这一点 编写一个定制的控制器工厂不是比拥有一个处理404的操作的附加控制器要多些工作吗

如果您有某种处理应用程序范围功能(如设置或类似功能)的
GeneralController
,此操作也可以是其中的一部分

所以。控制器工厂和控制器之间的哪一个:

  • 开发更耗时
  • 更容易出错
  • 更复杂,
  • 在有bug的情况下影响应用程序的更大表面

当涉及到过度工程时,敏捷开发人员被认为是非常懒惰的。

我不知道你如何为它实现定制控制器工厂,但当有人告诉你如何实现时,我想要它:真正的@Daniel White的可能复制品?这是我联系到的问题,因为这是我问的问题。既然我解释了我为什么这样问,你读过这个问题了吗?我不知道你是如何为它实现定制控制器工厂的,但当有人告诉你如何实现时,我想要它:真正的@Daniel White的可能复制品?这是我联系到的问题,因为这是我问的问题。你读过这个问题吗,因为我解释了为什么我会这样问?没有。这仍然需要一个
控制器来处理错误。我正试图避免这一切。按照我想要的方式去做可能是“更多的工作”,但我“认为”最终结果应该更干净。仅此而已。我的
/shared/notfound.vbhtml
文件是一个视图,我已经在很多代码中使用了它,其中我抛出了
ResourceNotFoundError
。我不想把同一个文件复制/粘贴到一个html文件中,仅仅为了提供与其他地方相同的错误。不幸的是,ResourceNotFoundError不能从Global.as中的Application\u Error方法工作