2

ここの例に従っています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 }
            );
        }

私は間違いなく正しいエンドポイントに到達しており、デバッグするとアイテムがnullであることがわかります。

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でテストできる必要があります。

4

1 に答える 1

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; }
}

または、正しい名前空間情報を送信します。

于 2013-10-06T20:29:10.313 に答える