Как избежать HttpRequestValidationException в ASP.NET MVC рендеринг того же представления, которое вызвало исключение

Вам нужно создать функцию без параметров, которые вы можете использовать в качестве команды:

b = Button(admin, text='as', command=lambda: button('hey'))

См. раздел «Передача аргументов в обратные вызовы» в этом документе .

36
задан tvanfosson 2 November 2008 в 08:10
поделиться

5 ответов

С последней версией ASP.NET MVC (RC, во время записи этого) можно просто поместить атрибут или на класс контроллера или на метод действия, например:

[ValidateInput(false)]
public ActionResult create()
{
    // ...method body
}

ValidateInputAttribute находится в Системе. Сеть. Mvc.

, Но поскольку другие сказали, действительно затем необходимо выполнить собственную проверку ручного ввода или очистку.

Используя MVC 3, необходимо также удостовериться, что это находится в Web.config: <system.web><httpRuntime requestValidationMode="2.0" /></system.web>

40
ответ дан Bryan Legend 23 September 2019 в 22:45
поделиться

Вместо того, чтобы фиксировать ошибку в global.asax Application_Error, Вы могли поймать его путем добавления обработчика ошибок для контроллера, который явно фиксирует эту ошибку и перенаправления к представлению с сообщением об ошибке и соответствующими данными представления.

я нашел это, несколько старое, сообщение о том, как сделать это с атрибутами.

1
ответ дан tvanfosson 23 September 2019 в 22:45
поделиться

Помещенный помещает ValidateRequest = "ложь" к Вашему объявлению представления aspx, но санируют пользовательский входной текст в Вашем коде, для предотвращения некоторых нападений xss.

0
ответ дан Hrvoje Hudo 23 September 2019 в 22:45
поделиться

Атрибут ValidateInputAttribute - это правильный метод отключения проверки запроса. Декларативный метод в представлении (aspx) не работает, потому что контроллер отвечает за получение запроса (не view / aspx).

1
ответ дан 27 November 2019 в 05:58
поделиться

Очень подробный пример того, как перехватывать это (и другие) исключения с помощью фильтра, см: http://code.google.com/p/geochat/source/browse/Source/Web/GeoChat. MvcExtensions / ExceptionHandlerAttribute.cs

Это позволит вам продолжить проверку, но не позволит пользователю увидеть «желтый экран смерти».

Это упрощенная (возможно, чрезмерно упрощенная) версия:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true), AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class ExceptionHandlerAttribute : FilterAttribute, IExceptionFilter {

private HandleErrorAttribute attribute = new HandleErrorAttribute();

public ExceptionHandlerAttribute() {
  this.ExceptionType = typeof(Exception);
  this.Order = 1;
}

public string View {
  get {
    return attribute.View;
  }
  set {
    attribute.View = value;
  }
}

public Type ExceptionType {
  get {
    return attribute.ExceptionType;
  }
  set {
    attribute.ExceptionType = value;
  }
}

public void OnException(ExceptionContext filterContext) {
  if (this.ExceptionType.IsInstanceOfType(filterContext.Exception)) {
    string controller = (string)filterContext.RouteData.Values["controller"];
    string action = (string)filterContext.RouteData.Values["action"];
    if (controller == null)
      controller = String.Empty;

    if (action == null)
      action = String.Empty;

    HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controller, action);
    ViewResult result = new ViewResult();
    result.ViewName = this.View;
    result.MasterName = String.Empty;
    result.ViewData = new ViewDataDictionary<HandleErrorInfo>(model);

    result.TempData = filterContext.Controller.TempData;
    filterContext.Result = result;

    filterContext.ExceptionHandled = true;
    filterContext.HttpContext.Response.Clear();
    filterContext.HttpContext.Response.StatusCode = 500;
  }
}

}

4
ответ дан 27 November 2019 в 05:58
поделиться