【发布时间】:2011-05-11 03:22:38
【问题描述】:
我正在查看this so question,其中回答者展示了一种从 Global.asax 中的 Application_Error 方法抛出 NotFoundException 的好方法。
这很棒,但是我想稍微修改一下……只是不确定如何。
我的共享视图文件夹中有一个 NotFound 视图和一个错误视图。我想继续这个,不必有 ErrorController。
当“控制器”不存在时,有什么方法可以抛出 404 NotFound 错误,而仍然不必有错误控制器?
IE:如果您访问http://example.com/asdf,而 asdf 是一个无效的控制器,我希望从我的共享视图目录中加载“未找到”视图。
编辑
基本上我遇到的问题是“DRY”。我可以构建一个 ErrorController,但是如果我这样做,那么我必须在两个位置拥有 same view。我的 Views/Error 文件夹中的一个仅用于这种情况,一个位于我的 Views/Shared 文件夹中,我可以从任何控制器加载错误或 NotFound 视图。
我也试过了
Private Sub BaseGlobal_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error
Dim exception As System.Exception = Server.GetLastError
Response.Clear()
Dim httpException As HttpException = TryCast(exception, HttpException)
Dim routeData As RouteData = New RouteData()
routeData.Values.Add("controller", "Events")
If (Not httpException Is Nothing) And (httpException.GetHttpCode = 404) Then
routeData.Values.Add("action", "NotFound")
Server.ClearError()
Dim errorController As IController = New UrbanNow.Core.Controllers.EventsController
Response.StatusCode = 404
errorController.Execute(New RequestContext(New HttpContextWrapper(Context), routeData))
End If
End Sub
EventsController 显然是用于事件的,但尝试在 NotFound 视图中加载(希望它会从共享目录中拉出……但我没有运气。
【问题讨论】:
-
嗯,现在我想起来了……这可能是不可能的。期待听到您的意见。
标签: asp.net-mvc error-handling http-status-code-404