This SO answer为处理404错误提供了一个优雅的解决方案。我修改了该答案中给出的代码,以处理400个错误(当有人为我的网站提供“潜在危险”字符时发生的响应)。我的代码如下所示:
/// <summary> Handle "page not found" (HTTP 404) and "dangerous/invalid syntax" (HTTP 400) errors. </summary>
protected void Application_EndRequest()
{
// This code is adapted from: https://stackoverflow.com/a/9026941/1637105
var code = Context.Response.StatusCode;
if (code == 404 || code == 400) {
Response.Clear();
var rd = new RouteData();
rd.DataTokens["area"] = "AreaName"; // In case controller is in another area
rd.Values["controller"] = "Errors";
rd.Values["action"] = "NotFound";
IController c = new ErrorsController();
c.Execute(new RequestContext(new HttpContextWrapper(Context), rd));
}
}
我的问题是,如果我安装了一瞥,那么当我收到400错误时(例如,如果我导航到http://example.com/HiBob :),我会得到:
Glimpse.Core.dll中出现'System.NullReferenceException'类型的异常
由于对通过此代码重新路由的404错误似乎没有任何问题,我认为在请求路径上瞥见了。
在我发送新请求以便由MVC管道执行之前,我可以在此代码中对请求路径进行URL编码吗?
编辑:我将glimpse NuGet包更新到最新版本,问题似乎已经消失。生活很好。我是个白痴(因为在抱怨它不起作用之前没有确定我有最新的东西)。