接受webapi控制器中的application / xml内容

时间:2015-06-24 13:29:58

标签: asp.net-web-api asp.net-web-api2 frombodyattribute

我想创建一个接受application / xml内容的动作。

到目前为止,我已经创建了这个。

function getUrl(suffix) {
    if (suffix) 
        return 'http://localhost:8080/accounts/'+getAccountId()+'/groups/'+suffix;
    else
        return 'http://localhost:8080/accounts/'+getAccountId()+'/groups';
}

...

createGroup: function(groupName, display) {
        var deferred = $q.defer();

        $http.post(getUrl(groupName), display)
            .success(function (response) {
                var display = response.data.display;
                deferred.resolve(new Display(display));
            })
            .error(function(response) {
                deferred.reject('Failed to retrieve display: ' + response.message);
            });

        return deferred.promise;    
    },

当我发布以下内容时

namespace App.Areas.Test.Controllers
{

    public class UserModel
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
    }


    public class TestController : ApiController
    {
        [HttpPost]
        public UserModel Test([FromBody] UserModel um)
        {
            return um;
        }
    }
}

我最终得到了这个回复

    <?xml version="1.0" encoding="UTF-8" ?>
    <UserModel>
    <FirstName>Some Name</FirstName>
    <LastName>Some Last Name</LastName>
    <Age>30</Age>
    </UserModel>

我尝试删除<UserModel i:nil="true" /> 属性,但这也没有帮助。由于某种原因,内容不会绑定到现有模型。

2 个答案:

答案 0 :(得分:0)

您是否添加了Content-Typeapplication\xml标题?您需要通知序列化器主体的格式。

答案 1 :(得分:0)

这样做就可以了......

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
xml.UseXmlSerializer = true;