使用Chrome Postman插件时,Web Api Post值始终为null

时间:2013-10-06 14:27:30

标签: xml http-post asp.net-web-api

我在这里关注一个示例http://www.asp.net/web-api/overview/creating-web-apis/creating-a-web-api-that-supports-crud-operations,但我无法通过Chrome postman插件接收帖子请求。

这是我发布的xml的一个例子。我已将Postman中的Content-Type标头设置为application / xml。

<?xml version="1.0" encoding="ISO-8859-1"?>
<Product>
  <Category>Groceries</Category>
  <Name>New From Post</Name>
  <Price>1.39</Price>
</Product>

我也尝试过以下解决方案Model always null on XML POST,但似乎没有任何区别。这是我的WebApiConfig文件。

public static void Register(HttpConfiguration config)
        {

            config.Formatters.Add(new XmlMediaTypeFormatter());
            config.Formatters.XmlFormatter.UseXmlSerializer = true;

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }

我肯定会找到正确的终点,我可以看到我调试它时该项为空。

public HttpResponseMessage PostProduct(Product item)
        {
            item = repository.Add(item);
            var response = Request.CreateResponse(HttpStatusCode.Created, item);

            string uri = Url.Link("DefaultApi", new { id = item.Id });
            response.Headers.Location = new Uri(uri);
            return response;
        }

有什么想法吗?

编辑:当我用json发布相同的值时,这似乎工作正常。我真的需要能够用xml来测试它。

1 个答案:

答案 0 :(得分:1)

DataContract这样适用于您的DTO课程。

[DataContract(Namespace="")]
public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public decimal Price { get; set; }
}

或者,发送正确的命名空间信息。