AngularJS将HtmlForm发布到.NET WebAPI2

时间:2014-08-28 16:51:29

标签: angularjs asp.net-web-api2

我有一个html表单定义为:

<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>

然后我使用:

通过角度服务将表单对象发布到.net 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 个答案:

答案 0 :(得分: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将是您的默认反序列化程序。