我试图在网络应用中处理例外工作,我工作正常,直到我点击" http://localhost:52183/Usuario/InsertarUsuario/89之类的网址。" 并在visual studio上显示此错误:
system.web上发生了类型system.web.httpexception的异常但在用户代码中没有处理。
我想做什么?
如果页面不存在,则显示404页面
在其他情况下,显示一般错误。
Global.asax.vb中的代码
Imports System.Web.Http
Public Class MvcApplication
Inherits System.Web.HttpApplication
Sub Application_Start()
AreaRegistration.RegisterAllAreas()
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
RouteConfig.RegisterRoutes(RouteTable.Routes)
End Sub
Protected Sub Application_Error(sender As Object, e As EventArgs)
Dim ex As Exception = Server.GetLastError()
Dim httpContext = DirectCast(sender, MvcApplication).Context
Dim httpEx = TryCast(ex, HttpException)
Response.Clear()
If (httpEx Is Nothing Or httpEx.Message = "") Then
httpEx = New HttpException(500, "Error interno de servidor", ex)
Response.Redirect("~/Error/PeticionInvalida")
End If
If (TypeOf ex Is HttpException) Then
If (httpEx.GetHttpCode = "404") Then
Response.Redirect("~/Error/NoEncontrado")
Else
Response.Redirect("~/Error/PeticionInvalida")
End If
End If
Server.ClearError()
End Sub
End Class
我做错了什么?或者我将如何处理这些错误?
提前感谢您提供给我的信息。
答案 0 :(得分:0)
我喜欢在web.config中使用httpErrors
。它是一个IIS设置,因此您必须将其放在web.config的system.webserver
部分中。由于它是IIS级别设置,因此可以很好地捕获404 - 尤其是那些与您的任何路线都不匹配的设备。
以下是我在项目中使用的代码:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="400" subStatusCode="-1" />
<remove statusCode="403" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<remove statusCode="500" subStatusCode="-1" />
<error statusCode="400" path="/Error/BadRequest" responseMode="ExecuteURL"/>
<error statusCode="403" path="/Error/NotAuthorized" responseMode="ExecuteURL" />
<error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL" />
<error statusCode="500" path="/Error" responseMode="ExecuteURL" />
</httpErrors>
remove
标记用于删除任何继承的设置(例如,来自machine.config)。
对于每个错误代码,我只是执行控制器操作。在我的控制器操作中,我还相应地设置了http响应代码,以便浏览器知道错误 - 这样做是件好事,谷歌等索引器不会将您的错误页面编入索引。
更新7-4-2017:这是我使用的错误控制器:
[AllowAnonymous]
public class ErrorController : Controller
{
public ActionResult Index()
{
Response.StatusCode = 500;
return View("Error");
}
public ViewResult BadRequest()
{
Response.StatusCode = 400;
return View("BadRequest");
}
public ViewResult NotFound()
{
Response.StatusCode = 404;
return View("NotFound");
}
public ViewResult NotAuthorized()
{
Response.StatusCode = 403;
return View("NotAuthorized");
}
}