Zhi*_*hou 5 c# asp.net asp.net-mvc azure azure-cloud-services
我在 Azure 云服务上运行的 MVC 5 Web 应用程序因未处理的异常“从客户端 (:) 检测到潜在危险的 Request.Path 值”而崩溃。
这次崩溃的原因是某些第三方(可能是恶意的)使用 url 访问了我的端点:http : //myExampleHost.com/m : 443/templates
url 中的冒号无法通过路径验证。
某些答案(从客户端 (*) 检测到潜在危险的 Request.Path 值)建议更改验证规则。然而,出于安全考虑,我们可能不想在这方面妥协。
它的理想行为是:我们捕获异常,记录它并返回一些错误消息而不会崩溃。我们应该怎么做?
一个更普遍的问题是:如何在请求命中 MVC 中的控制器之前捕获异常?
它的理想行为是:我们捕获异常,记录它并返回一些错误消息而不会崩溃。我们应该怎么做?
根据我的理解,您可以利用该Application_Error
事件来捕获 ASP.NET 中未处理的异常。这是我的测试,你可以参考:
protected void Application_Error()
{
HttpContext httpContext = HttpContext.Current;
var exception=Server.GetLastError();
var httpException = exception as HttpException ?? new HttpException(500, "Internal Server Error", exception);
var jsonResponse = new
{
Message = exception.Message,
StatusCode = httpException.GetHttpCode(),
StackTrace=httpException.StackTrace
};
httpContext.Response.ContentType = "application/json";
httpContext.Response.ContentEncoding = Encoding.UTF8;
httpContext.Response.Write(JsonConvert.SerializeObject(jsonResponse));
httpContext.Response.End();
}
Run Code Online (Sandbox Code Playgroud)
注意:您还可以重定向到特定的错误页面。
此外,您可以利用customErrors
web.config 中的 并捕获特定 HTTP 错误代码的错误页面。此外,您可以检查Application_EndRequest
事件下的 HTTP 状态代码并编写自定义响应,详细信息可以参考此类似问题。此外,我建议您按照Demystifying ASP.NET MVC 5 Error Pages and Error Logging了解有关错误处理的更多详细信息。
归档时间: |
|
查看次数: |
2046 次 |
最近记录: |