我有一个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表单对象。
非常感谢任何帮助。提前谢谢!
答案 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将是您的默认反序列化程序。