У меня есть эта часть кода для обработки HttpRequestValidationException в моем файле global.asax.cs.
protected void Application_Error(object sender, EventArgs e)
{
var context = HttpContext.Current;
var exception = context.Server.GetLastError();
if (exception is HttpRequestValidationException)
{
Response.Clear();
Response.StatusCode = 200;
Response.Write(@"<html><head></head><body>hello</body></html>");
Response.End();
return;
}
}
Если я отлаживаю мое приложение, оно работает отлично. Но когда я помещаю его на наш производственный сервер, сервер игнорирует его и генерирует "потенциально опасное значение параметра request.form, обнаруженное на клиенте" - страницу с ошибкой. Я не знаю, что происходит точно... Если кто-нибудь знает, в чем проблема, или что я делаю неправильно.?
Также я не хочу устанавливать validaterequest в false в файле web.config.
Сервер использует IIS7.5, и я использую asp.net 3.5.
Спасибо, Бруно
Хорошо, я нашел это сам. Я должен удалить последнюю ошибку.
protected void Application_Error(object sender, EventArgs e)
{
var context = HttpContext.Current;
var exception = context.Server.GetLastError();
if (exception is HttpRequestValidationException)
{
context.Server.ClearError(); // Here is the new line.
Response.Clear();
Response.StatusCode = 200;
Response.Write(@"<html><head></head><body>hello</body></html>");
Response.End();
return;
}
}
Другим способом, который работает только с MVC, является использование настраиваемого фильтра исключений:
Это имеет то преимущество, что вы можете использовать обычную инфраструктуру MVC (Razor), чтобы отобразить представление ошибки.
public class HttpRequestValidationExceptionAttribute : FilterAttribute, IExceptionFilter {
public void OnException(ExceptionContext filterContext) {
if (!filterContext.ExceptionHandled && filterContext.Exception is HttpRequestValidationException) {
filterContext.Result = new RedirectResult("~/HttpError/HttpRequestValidationError");
filterContext.ExceptionHandled = true;
}
}
}
HttpContext.Current.ApplicationInstance.CompleteRequest
. Посмотрите на это для объяснения: support.microsoft.com/en-us/help/312629/…