Как мне использовать 100 Continue в веб-сервисе REST? - PullRequest
3 голосов
/ 06 февраля 2012

Некоторый фон

Я планирую написать службу REST, которая поможет облегчить сотрудничество между несколькими клиентскими системами. Подобно тому, как git или hg обрабатывают вещи, я хочу, чтобы клиент выполнял все слияния локально, а сервер отклонял новые изменения, если они не были объединены с существующими изменениями.

Как я хочу справиться с этим

Я не хочу, чтобы клиентам приходилось загружать все свои наборы изменений, прежде чем им сказали, что им нужно объединиться в первую очередь. Я хотел бы сделать это, выполнив POST с заголовком Expect 100 Continue. Затем сервер может проверить, что он может принять наборы изменений на основе информации заголовка (в данном случае это не сложно для меня) и либо отклонить запрос, либо отправить статус 100 Continue клиенту, который затем загрузит изменения.

Моя проблема

Насколько мне удалось выяснить, ASP.NET не поддерживает этот сценарий, к тому времени, когда вы видите запрос в действиях вашего контроллера, тело POST обычно уже полностью загружено. Я кратко посмотрел на WCF REST, но я так и не смог найти способ сделать это, их пример условного PUT имеет полное тело запроса перед тем, как отклонить запрос.

Я рад использовать любую альтернативную инфраструктуру, которая работает в .net или может быть легко настроена для работы в Windows Azure.

1 Ответ

0 голосов
/ 17 февраля 2012

Я не могу рекомендовать WcfRestContrib достаточно.Это бесплатно, и у него много способностей .

Но я думаю, вам нужно использовать OpenRasta вместо WCF, чтобы делать то, что вы хотите.Там много чего есть, например wiki , запись в блоге 1 , запись в блоге 2 .Это может потребовать много усилий, но это платформа .NET, которая действительно нацелена на то, чтобы быть RESTful, а не RPC, как WCF.И у него есть возможность работать с заголовками, как вы и просили.Он даже имеет PipelineContributors , которые имеют доступ ко всему контексту вызова и могут останавливать выполнение, обрабатывать перенаправления или даже отображать что-то отличное от ожидаемого.

РЕДАКТИРОВАТЬ: насколькоЯ могу сказать, что не возможно в OpenRasta в конце концов, потому что "100 continue обычно обрабатывается средой хостинга, а не OR, поэтому мы не поддерживаем его как таковой, потому что мыне получается ответить в конвейере asp.net "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...