2014-08-28 2 views
1

У меня есть HTML форма определяется как:AngularJS Сообщение HtmlForm для .NET WebAPI2

<form id="userForm" name="userForm" class="form-horizontal" role="form" ng-submit="submitForm()" novalidate> 

с несколькими полями ввода, привязанных к нг-модели, так:

<input type="text" class="form-control" ng-model="formAttributes.title" name="formTitle" placeholder="Title of the Form" required> 

тогда я отправляю форма объекта с помощью угловой службы к контроллеру .net WebAPI 2 с помощью:

$http.post('/api/UI', "=" + JSON.stringify(userForm)) 

метод сообщение в WebAPI2 принимает [FromBody] строковое значение и Я получил этот тип сообщения, чтобы работать, когда userForm был объектом JSON в области объекта INSTEAD самого объекта формы html, но по какой-либо причине он не работает, если я передаю объект формы html.

У меня есть тонна форм, которые мне нужно будет отправлять в аналогичные контроллеры, есть ли относительно простой способ разместить объект html-формы для контроллера webapi2 без необходимости манипулировать самим объектом данных формы? Или, более ясно, есть ли способ, чтобы подготовить метод webapi2 поста, так что я могу назвать это так:

$http.post('/api/UI',userForm) 

Я прочитал тонну статей на webapi2 и что заставило меня успешно представить произвольный $ scope.object, который я создал с помощью вышеописанного метода (если я добавлю его с помощью «=», стягиваю объект json и изменил заголовок contenttype на json/charset8), но возможность отправить форму сама по себе кажется намного более чистым, а я предпочли бы делать так. В любом случае, я хотел бы знать, почему я не могу отправить объект формы html после того, как я все равно его строю.

Любая помощь была бы принята с благодарностью. Заранее спасибо!

ответ

1

Проект WebApi настроен в Global.asax, там вы найдете класс с именем WebApiConfig. Там вы найдете «Медиа Форматтеры», что говорит, если ваш WebAPI способен сериализации/десериализации JSON System.Net.Http.Formatting.JsonMediaTypeFormatter()

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      //... 

      System.Web.Http.GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear(); 
      config.Formatters.Insert(0, new System.Net.Http.Formatting.JsonMediaTypeFormatter()); 
      config.Formatters.Insert(0, new System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter()); 


      config.EnableSystemDiagnosticsTracing(); 
     } 
    } 

Если JSON форматировщик это первый элемент в списке не нужно добавить = знак, так как JSON будет вашим десериализатором по умолчанию.

+0

Я думал, что если бы я удалил xml-тип из списка форматов, то JSON в конечном итоге стал бы по умолчанию. Как оказалось, это неверно. Я изменил его на то, что у вас есть, в котором явным образом перечисляет форматирование JSON, и теперь все работает так, как я этого хотел. СПАСИБО! – JakeHova