asp.net-web-api - ASP.NET Web API - 模型绑定(bind)不适用于 POST 上的 XML 数据

标签 asp.net-web-api

在使用带有 ASP.NET Web API 的 XML 数据进行 POST 时,我无法让模型绑定(bind)工作。 JSON 数据工作正常。

使用全新的 Web API 项目,这是我的模型类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class PostResponse
{
    public string ResponseText { get; set; }
}

这是我在 Controller 中的 post 方法:
    public PostResponse Post([FromBody]Person aPerson)
    {
        var responseObj = new PostResponse();
        if (aPerson == null)
        {
            responseObj.ResponseText = "aPerson is null";
            return responseObj;
        }

        if (aPerson.FirstName == null)
        {
            responseObj.ResponseText = "First Name is null";
            return responseObj;
        }

        responseObj.ResponseText = string.Format("The first name is {0}", aPerson.FirstName);
        return responseObj;
    }

我可以使用 Fiddler 的 JSON 成功运行它:

Request Headers:
User-Agent: Fiddler
Host: localhost:49188
Content-Type: application/json; charset=utf-8
Content-Length: 38

Request Body:
{"FirstName":"Tom","LastName":"Jones"}

Result:
{"ResponseText":"The first name is Tom"}



传入 XML 时,Person 对象未正确水合:

Request Headers:
User-Agent: Fiddler
Host: localhost:49188
Content-Type: text/xml
Content-Length: 79

Request Body:
<Person>
    <FirstName>Tom</FirstName>
    <LastName>Jones</LastName>
</Person>

Result:
<ResponseText>aPerson is null</ResponseText>



据我了解,XML 应该类似于 JSON。关于我在这里缺少什么的任何建议?

谢谢,
跳过

最佳答案

将此添加到您的 WebApiConfig.cs :

config.Formatters.XmlFormatter.UseXmlSerializer = true;

这迫使 Web API 使用 XMLSerializer 而不是 DataContractSerializer,并允许您传递原始 XML。

否则,您必须通过完全合格的数据契约(Contract) XML,即:
<Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Test.WebAPI.Controllers">
<FirstName>a</FirstName>
<LastName>b</LastName>
</Person> 

关于asp.net-web-api - ASP.NET Web API - 模型绑定(bind)不适用于 POST 上的 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976352/

相关文章:

c# - ASP.NET 网络 API : Perform Search on Table using HTTP GET Method and Linq to SQL Dynamically

c# - Azure 连接设置中的 Web API 因大请求而失败

javascript - 添加到表单数据的 JavaScript 对象在服务器上始终接收为 null

c# - OWIN 的 app.usestaticfiles 和 app.usefileserver 之间有什么区别

javascript - http.post 从 angularJS 到 c# Web api 的简单对象为 null 或所有属性均为 null

c# - 如何在 C# 应用程序中使用 FluentValidation

c# - 在自托管 WebApi 中获取 HttpRequest 上下文

c# - Web Api $extend IQueryable 带过滤器

javascript - HTTP 406 错误服务器响应 : when sending filtering params in request

c# - 404 for web.api cors 选项