2014-08-28 43 views
1

我有一個HTML表單定義爲:AngularJS郵政HtmlForm控件到.NET WebAPI2

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

綁到NG-模型作爲這麼幾個輸入字段:

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

我再發布使用經由角服務到達網絡的WebAPI 2控制器形式對象:

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

在WebAPI2 Post方法花費[FromBody]字符串值和當userForm是html表單對象本身的作用域JSON對象INSTEAD時,我得到了這種類型的帖子,但是無論出於什麼原因,如果我傳遞了html表單對象,它都不起作用。

我有很多表單,我將需要發佈到類似的控制器,有沒有相對簡單的方法來發佈一個html表單對象到webapi2控制器,而無需操縱表單數據對象本身?或者,更清晰,有沒有爲自己準備webapi2 POST方法,這樣我可以這樣調用:

$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 2014-08-28 19:10:50