Как получить XML в ASP.NET Веб-сервис?

#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 Проверка запроса.