#c# #asp.net #xml #web-services #security
#c# #asp.net #xml #веб-сервисы #Безопасность
Вопрос:
У меня есть квази-RESTful ASP.NET веб-служба, в которую я хотел бы иметь возможность отправлять XML. Мой метод выглядит примерно так:
[WebMethod(false, System.EnterpriseServices.TransactionOption.NotSupported)]
public void save(string saveXml)
{
XDocument saveXml = XDocument.Parse(saveXml);
....
Когда я пытаюсь опубликовать в этой веб-службе, я получаю исключение:
System.Web.HttpRequestValidationException: A potentially dangerous Request.Form
value was detected from the client...
Основываясь на некотором поиске, я понимаю, что все запросы к ASP.NET страницы ищут символы типа «<«, которые считаются опасными (очевидно, это относится к моему XML). Это можно легко отключить для отдельных страниц, но не для веб-служб. Единственное решение, которое я нашел, заключалось в изменении режима проверки запроса в моем web.config на «2.0». Я не хочу переходить на старую версию чего-либо только потому, что мой метод one web service не работает с версией 4.0. Есть ли какой-либо способ отключить это для моего конкретного метода? Заранее спасибо.
Комментарии:
1. Вы также могли бы кодировать XML-строку в base64. En / декодирование base64 является тривиальным и позволяет избежать такого рода головной боли при настройке.
2. Какой клиент будет отправлять сообщения в этот сервис? Как вы публикуете, когда получаете это исключение?
3. Кроме того, это может быть намеком на то, что пришло время прекратить использовать ASP.NET Веб-сервисы, которые являются «унаследованной технологией».
4. @Джон Сондерс: Клиент — это гибкое приложение. Я понимаю, что есть несколько других лучших альтернатив, но из-за нехватки времени я должен использовать то, что уже настроено в нашем приложении.
5. Находится ли веб-служба в отдельном приложении IIS? Это исключение возникает в попытке защитить ваш веб-сайт. Если бы служба находилась в приложении, отличном от сайта, то вы бы не получили сообщение об ошибке.
Ответ №1:
Новая модель проверки запроса 4.0 немного требовательнее, но пока ваш клиент отправляет Content-type
заголовок HTTP-запроса as text/xml
вместо application/x-www-form-urlencoded
того, чтобы он проходил (или, скорее, обходил) ASP.NET Проверка запроса.