У меня много трудностей с маршрутизацией URL OpenRasta, особенно когда дело касается запросов PUT.
Допустим, у меня есть гипотетический обработчик UserContact, и мне нужно предоставить его со следующей подписью:
//Create a new contact:
POST /users/{userId}/contacts/create
//Update a contact:
PUT /users/{userId}/contact/{contactId}
В обоих случаях тело запроса содержит закодированные в форме параметры для контакта.
В моем Configuration.cs у меня есть:
ResourceSpace.Uses.PipelineContributor<HttpMethodOverriderContributor>();
ResourceSpace.Has.ResourcesOfType<ContactPost>()
.AtUri("/users/{userId}/contacts/create")
.And.AtUri("/users/{userId}/contacts/{contactId}")
.HandledBy<UserContactHandler>()
.AsXmlDataContract()
.And.AsJsonDataContract();
Мой обработчик имеет два метода:
public OperationResult Post(int userId, ContactPost contact)
public OperationResult Put(int userId, int contactId, ContactPost contact)
У меня две проблемы с этим кодом:
Многие клиенты (а также наш сервер IIS) не поддерживают PUT / DELETE.В конечном счете, я бы хотел упростить это, сделав обе вышеуказанные операции POST.К сожалению, как только я это сделаю, OpenRasta не сможет определить, к какому методу я пытаюсь привязаться, и ни один из них не работает - я получу 406 Not Acceptable для запроса / create и / {contactId}.
Если, однако, я сохраняю код, как указано выше, и клиент отправляет через заголовок X-HTTP-Method-Override: PUT, то запрос / create работает, но запрос / {contactId} по-прежнему возвращаетсяa 406.
Он даже не входит в мой обработчик, поэтому я не уверен, с чего начать отладку чего-то подобного.
Есть ли способсказать OpenRasta явное сопоставление маршрутов URL с определенными методами, как в ASP.NET MVC?Или есть что-то еще очевидное, что я здесь не так делаю?