У меня есть веб-приложение на основе MVC3 (нет бета-версии или релиза, версия RTM/RTW), в которой есть действие, которое принимает файлы XML для обработки.
Конечно, это кажется злым для MVC из-за возможных атак, поэтому он этого не позволяет. Ну, я пытаюсь поставить либо AllowHtml на объект модели как таковой:
public class XMLModel
{
[AllowHtml]
public string msg { get; set; }
}
Или я устанавливаю ValidateInput на false в моем методе действий, например:
[ValidateInput(false)]
public ActionResult AddCDR(XMLModel model)
{
}
Причиной наличия "сильно" типизированной модели в первую очередь было то, что я изначально пытался иметь строковое значение с именем msg в качестве параметра метода действия, но это всегда возвращалось пустым.
Теперь, когда кто-то отправляется в эту форму, либо на том же компьютере, либо на сетевом компьютере, поле msg всегда пустое.
Я проверил с WireShark, что данные действительно находятся в запросе.
Теперь, одна интересная вещь. Это не обязательно для MVC 3. Тем не менее это имеет небольшое значение.
Если я добавлю это в свою веб-конфигурацию:
<httpRuntime requestValidationMode="2.0" />
Он работает для запросов, поступающих с локального компьютера, но НЕ работает из другой системы.
Я думаю, что версия AllowHtml кажется элегантной - если только она сработала.
Я также узнал об ошибке в RC2 - это не должно меня сильно повлиять, но я попытался добавить в Application_Start() все равно:
ModelMetadataProviders.Current = new DataAnnotationsModelMetadataProvider();
Как и ожидалось, это не имеет никакого значения.
Все работает так, как ожидалось, на моем компьютере разработки (Win7x64, VS2010), но в целевой системе (Win2008R2x64, IIS7.5) вышеупомянутые проблемы затрудняют время.
Очень важно отметить. Если я отправляю в действие без угловых скобок, я получаю данные формы, как ожидалось. Как только появятся угловые скобки, хотя мое действие вообще не вызывается или оно не находит данные формы, ни в параметрах метода действия, ни, например, в Request.Params [ "msg" ], где это должен быть.
Любые идеи, позволяющие XML через?
UPDATE
Я попытался обойти это, ожидая, когда кто-нибудь придумает ответ. Я еще не смог его решить, но я проверил несколько дополнительных деталей;
- Во-первых, я подтвердил, что версия ASP.NET MVC 3, установленная как на моем компьютере разработки, так и на веб-сервере, одинакова; v3.0.20105.0 (в соответствии с "Установка и удаление программ" ).
- Веб-приложение было создано с помощью бета-версии MVC3, а затем преобразовано в RC1 и RC2 по мере их выхода и, наконец, в версию RTM. Это означало, что мне пришлось изменить код из-за изменения ViewBag. Однако, поскольку я не знал точно, что еще изменилось, я создал совершенно новое приложение MVC3 с версией RTM, создал контроллер с тем же именем, с тем же методом действий, взяв модельный объект, аналогичный используемому в данный момент, переименовал старый каталог веб-приложений и поместил эту новую. Точно так же происходит - например, параметр с атрибутом AllowHtml проходит со всем содержимым, когда запрос выполняется с локального компьютера, но если он поступает с удаленной машины, то HTML (фактически XML) удаляется.
- Не исключение. Я установил Elmah и проверил это - исключение не существует, мой метод действия, по-видимому, просто вызван с чем-либо похожим на XML, удаленным из параметров в метод.
Излишне говорить, что это сводит меня с ума. Вчера у меня был какой-то совет, чтобы посмотреть исходный код MVC3, но, к сожалению, это мне действительно не помогает, поскольку я не вижу ничего явно неправильного там, и я не могу отлаживать код на рассматриваемом сервере.
Любые идеи все еще очень нужны, спасибо!:)