2011-01-20 1 views
2

Я пишу реализацию IHttpHandler, которая будет получать XML-данные, отправленные через обычный HTTP POST с другого веб-сайта. Вот прототип реализации:Отправка XML-данных через HTTP POST в IHttpHandler вызывает HttpRequestValidationException

public class MyHandler : IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     string s = context.Request.Form["input"]; // <== this throws HttpRequestValidationException 
     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml(s); 
     // ... 
    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 
} 

Я тестирую выполнение этой простой страницы:

<body> 
    <form method="post" action="MPSConnector.Results.dsvc"> 
     <textarea name="input"></textarea> 
     <input type="submit" value="Go!" /> 
    </form> 
</body> 

Проблема заключается в том, что, когда я пытаюсь читать «входного» значение из посланных data, если он содержит строку xml, все, что я получаю, это исключение HttpRequestValidationException. Я попытался с помощью

<pages validateRequest="false"> 

в web.config и положить VALIDATE = «ложный» атрибут в объявлении обработчика в разделе httpHandles, без результатов.

Как читать прочитанный xml в моем обработчике? (обратите внимание, что для этой задачи я должен использовать IHttpHandler).

EDIT: Framework версии: 4.0, IIS 7.x

Спасибо всем! :)

ответ

0

Насколько я знаю, вам просто нужно закодировать этот XML с сущностями.

Я имею в виду, что < должно быть & lt; или> & gt ;, и так далее.

EDIT: Я обнаружил, что это дубликат: How can Request Validation be disabled for HttpHandlers?

Попробуйте это !! :)

+0

Hi Матиас, и спасибо за ваш ответ. Обратите внимание, что я не контролирую данные, получаемые обработчиком, страница, которую я опубликовал, является лишь примером для тестирования. Я должен предположить, что данные xml не будут кодироваться, основываясь на документации системы, которая будет отправлять данные в производственной среде. –

+0

Нет проблем. Понимаю, позвольте мне подумать ... –

+0

Вы пробовали с помощью HTTP-модуля? Попробуйте, если вы получите данные, и вы можете закодировать там, если это сырой XML, а затем ваш обработчик получит кодированные данные. –

0

Просто измените web.config как это:

<location path="Handlers/MyHandler.ashx"> 
     <system.web> 
     <httpRuntime requestValidationMode="2.0" /> 
     </system.web> 
    </location>