【问题标题】:AngularJS Post HtmlForm to .NET WebAPI2AngularJS 将 Html 表单发布到 .NET Web API 2
【发布时间】:2014-08-28 16:51:28
【问题描述】:

我有一个 html 表单定义为:

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

有几个输入字段与 ng-model 相关联:

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

然后我通过 Angular 服务将表单对象发布到 .net WebAPI 2 控制器,使用:

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

WebAPI2 中的 Post 方法采用 [FromBody]string 值,当 userForm 是范围 JSON 对象而不是 html 表单对象本身时,我得到了这种类型的帖子,但无论出于何种原因,如果我是传递 html 表单对象。

我需要将大量表单发布到类似的控制器,是否有相对简单的方法可以将 html 表单对象发布到 webapi2 控制器,而无需操作表单数据对象本身?或者,更清楚地说,有没有办法准备 webapi2 post 方法,以便我可以这样调用它:

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

我已经阅读了大量关于 webapi2 的文章,这让我成功地提交了我使用上述方法创建的任意 $scope.object(如果我在它前面加上“=”,将 json 对象字符串化,然后将 contenttype 标头更改为 json/charset8) 但能够提交表单本身似乎更干净,我更愿意这样做。无论如何,我想知道为什么在我对它进行字符串化之后我不能提交 html 表单对象。

任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: angularjs asp.net-web-api2


    【解决方案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 将是您的默认反序列化程序。

    【讨论】:

    • 我想如果我从格式化程序列表中删除 xml 类型,那么 JSON 最终将成为默认值。看起来,这不是真的。我将其更改为您所拥有的,它首先明确列出了 JSON 格式化程序,现在一切都按我的意愿工作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-12-04
    • 2015-08-10
    • 2018-04-20
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多