Обманом ASP.NET в запрос на размышление является запрос Ajax для загрузки файла jQuery - PullRequest
6 голосов
/ 04 августа 2010

Я использую спасение, полученное из MvcContrib:

public class RescueAttribute : MvcContrib.Filters.RescueAttribute
{
    public RescueAttribute(string view) : base(view)
    {
        IgnoreAjax = false;
    }

    public RescueAttribute(string view, params Type[] exceptionTypes) : base(view, exceptionTypes)
    {
        IgnoreAjax = false;
    }

    protected override ActionResult CreateActionResult(Exception exception, ExceptionContext context)
    {
        var controller = (string) context.RouteData.Values["controller"];
        var action = (string) context.RouteData.Values["action"];
        var model = new HandleErrorInfo(exception, controller, action);

        if (context.Controller.ControllerContext.HttpContext.Request.IsAjaxRequest())
        {
            return new JsonResult(model);
        }
        return base.CreateActionResult(exception, context);
    }
}

Теперь при использовании загрузки файла в jQuery.form Request.IsAjaxRequest () возвращает false.Очевидно, это потому, что вы не можете загрузить файл с помощью json;этот плагин генерирует скрытый iframe для загрузки.

Чтобы компенсировать это, я добавляю скрытый ввод в любую форму, которая отправляется с помощью jquery.form и имеет входные данные:

$(this).append('<input type="hidden" name="X-Requested-With" value="XMLHttpRequest" />');

Это достаточно хорошо, чтобы обмануть IsAjaxRequest.Есть ли причина, по которой я не должен делать это?

1 Ответ

2 голосов
/ 24 февраля 2011

Этот метод подходит.

JQuery и другие клиентские библиотеки помещают X-Requested-With в заголовки.Однако помощники ASP Ajax используют скрытые элементы формы, как вы это делали выше.

Важно то, что IsAjaxRequest () проверяет поля формы и заголовки.Поэтому, если он находит XMLHttpRequest для X-Requested-With в любом месте, он возвращает true.

Хорошая техника.Я мог бы использовать это однажды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...