У мене є форма, в якій я використовую ckeditor. Ця форма добре працювала на Asp.Net 2.0 та 3.5, але зараз вона не працює в Asp.Net 4+. У мене ValidateRequest = "false" директива. Будь-які пропозиції?
У мене є форма, в якій я використовую ckeditor. Ця форма добре працювала на Asp.Net 2.0 та 3.5, але зараз вона не працює в Asp.Net 4+. У мене ValidateRequest = "false" директива. Будь-які пропозиції?
Відповіді:
Знайдено рішення на сторінці помилок. Просто потрібно додати requestValidationMode = "2.0"
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
Інформація про MSDN: Властивість HttpRuntimeSection.RequestValidationMode
Існує спосіб повернути перевірку на 2,0 для однієї сторінки. Просто додайте наведений нижче код до своєї web.config:
<configuration>
<location path="XX/YY">
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
</location>
...
the rest of your configuration
...
</configuration>
Я знаю , що це старе питання, але якщо ви зіткнулися з цією проблемою в MVC 3 , то ви можете прикрасити ActionMethod
з [ValidateInput(false)]
і просто відключити перевірку запитів на один ActionMethod
, що дуже зручно. І вам не потрібно вносити жодних змін у web.config
файл, тому ви все одно можете використовувати перевірку запиту .NET 4 скрізь в іншому місці.
напр
[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
// Do your own checking of value since it could contain XSS stuff!
return View();
}
Це працює без зміни режиму перевірки.
Ви повинні використовувати System.Web.Helpers.Validation.Unvalidated
помічник від System.Web.WebPages.dll
. Він поверне UnvalidatedRequestValues
об'єкт, що дозволяє отримати доступ до форми та QueryString без перевірки.
Наприклад,
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
Для мене працює для MVC3 та .NET 4.
Зауважте, що інший підхід полягає в тому, щоб дотримуватися поведінки валідації 4.0, але визначити свій власний клас, який випливає з RequestValidator
та встановити:
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(де YourNamespace.YourValidator
добре, ви повинні вміти здогадуватися ...)
Таким чином ви зберігаєте переваги поведінки 4.0s (зокрема, що перевірка відбувається раніше під час обробки), одночасно дозволяючи запитам, які вам потрібно пропустити, наскрізь.