Http Post с WebAPI Причиной "HttpOperationHandlerFactory не может определить входной параметр ..." - PullRequest
0 голосов
/ 20 марта 2012

У меня есть метод, который получает более одного параметра. Подпись метода с атрибутами выглядит следующим образом:

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public int AddUser(string firstName, string lastName, string emailaddress) { // actions here }

Однако, когда я использую этот метод, я получаю следующее исключение:

HttpOperationHandlerFactory не может определить ввод параметр, который должен быть связан с содержимым сообщения запроса для сервисной операции «Инициирование». Если операция не ожидает содержание в сообщении запроса использовать метод HTTP GET с операция. В противном случае убедитесь, что один из входных параметров имеет Свойство IsContentParameter имеет значение True или является типом, который присваивается одному из следующих: HttpContent, ObjectContent`1,

Итак, я создал собственный объект (например, ниже) для передачи.

[DataContract]
public class UserToAdd {
    [DataMember] public string firstName { get; set; }
    [DataMember] public string lastName { get; set; }
    [DataMember] public string emailAddress { get; set; }
}

Используя эту новую подпись:

[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
public int AddUser(UserToAdd user) { // actions here }

Когда я делаю это, я получаю 404. Кажется, я не могу победить. Есть предложения?

1 Ответ

1 голос
/ 21 марта 2012

Если вы хотите декларативно создавать маршруты, вы можете.Я должен был сделать это, так как унаследовал кучу невозобновляемых URI, которые должны были поддерживаться по причинам обратной совместимости.Я создал свой собственный атрибут для описания URI, ограничений и методов HTTP.Это фактически замена для WebInvoke / WebGet.Я размышляю над моими сервисными методами при запуске, чтобы обнаружить маршруты и при необходимости вызвать MapHttpRoute ().Каждый из моих маршрутов явно указывает контроллер и действие.Этот подход хорош для API в стиле RPC, но он потребовал много усилий.Приятно то, что он сохраняет определение маршрутов с помощью методов - это не то, что веб-API дает вам явно.

Так что, хотя стиль RPC возможен, он не идиоматичен.Web API сильно настроен на использование RESTful API с условным отображением маршрутов к сервисам и методам - ​​таким образом регистрируются очень общие маршруты, а соглашения делают все остальное.Это в значительной степени позволяет избежать вопросов определения маршрутов от их соответствующих действий.Если бы вы могли, я бы перешел к подходу RESTful / конвенция Web API, поскольку вы немного боретесь с фреймворком.

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