Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net web api操作后参数始终为空_C#_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

C# ASP.Net web api操作后参数始终为空

C# ASP.Net web api操作后参数始终为空,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,Asp.net Web Api,我的asp.net web api中的post action参数始终为空值 这是我的行动 [System.Web.Mvc.HttpPost] public HttpResponseMessage Add([FromBody]Products id) { var response = new HttpResponseMessage(); try { if (id

我的asp.net web api中的post action参数始终为空值

这是我的行动

[System.Web.Mvc.HttpPost]
        public HttpResponseMessage Add([FromBody]Products id)
        {

            var response = new HttpResponseMessage();
            try
            {
                if (id.ProductsList.Length > 0)
                {
                    response.StatusCode = HttpStatusCode.OK;
                    response.EnsureSuccessStatusCode();
                    response.Content = new StringContent(string.Format("Number of products {0}",id.ProductsList.Length) );
                    Logger.Info(string.Format("Number of products {0}", id.ProductsList.Length));
                }
                response.StatusCode = HttpStatusCode.BadRequest;
            }
            catch (Exception ex)
            {
                response.StatusCode = HttpStatusCode.InternalServerError;
                response.Content = new StringContent("Error occured");
                Logger.Error(ex);
            }
            return response;
        }
这就是我试图调用api的方式

var filePath = @"C:\Apps\Eastworks\Lott\boots.xml";
                var xmlDoc = new XmlDocument();
                xmlDoc.Load(filePath);

                var client = new HttpClient();
                MediaTypeFormatter jsonFormatter = new XmlMediaTypeFormatter();

                HttpContent content = new ObjectContent<string>(xmlDoc.OuterXml, jsonFormatter);
                if (content.Headers.Contains("Content-Type"))
                {
                    content.Headers.Remove("Content-Type");
                    content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                }

                var result = client.PostAsync("http://localhost:3103/Products/Add",
                              content)
                   .Result;
这是我的xml

<?xml version="1.0" encoding="UTF-8"?>
<products>
  <product>
    <code>mipacaloha</code>
    <related-product>paisley_blk</related-product>
    <related-product>mipacpolkadot</related-product>

    <description>Classic MiPac silhouette. 30cm (12 inches) wide by 37cm (15 inches) high with a 15cm (6 inches) depth.</description>
    <brand>Mi Pac</brand>
    <style>Backpack</style>
    <model-name>Pocket Prints</model-name>
    <weight>0.4</weight>
    <gender>womens</gender>

    <variant>
      <bag-details />
      <exact-colour>Aloha Sky blue</exact-colour>
      <colour>Blue</colour>
      <pic-url>005872</pic-url>
      <sku>136200</sku>
      <ean>5053466362002</ean>
      <stock>0</stock>
      <price>21.99</price>
    </variant>
    <variant>
      <bag-details />
      <exact-colour>Aloha Purple</exact-colour>
      <colour>Purple</colour>
      <pic-url>mipacaloha</pic-url>
      <sku>121521</sku>
      <ean>5053466215216</ean>
      <stock>6</stock>
      <price>18.99</price>
      <original-price>21.99</original-price>
    </variant>

  </product>
</products>
我正在设置要在应用程序启动中使用的XmlSerializer

var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
            xml.UseXmlSerializer = true;
我看过很多类似我的帖子。但我无法解决我的问题。请告诉我

谢谢,
Naresh

这可能是因为您将内容类型设置为x-www-form-urlecoded,它期望类似于body

name=value&name=value

尝试像这样将内容类型设置为xml,然后重试


content.Headers.Add(“内容类型”、“应用程序/xml”)

是否指定使用XmlSerializer的Web API?默认情况下,它使用DataContractSerializer绑定XML请求。

参数的名称是Id 可能是控制器绑定器在请求主体中查找名为Id的值

尝试将参数重命名为
products


公共HttpResponseMessage添加([FromBody]Products)

感谢您的回复。但我也试过了。当我使用XmlMediaTypeFormatter时,它已经将内容类型设置为“application/xml”。始终执行以下行:
response.StatusCode=HttpStatusCode.BadRequest。此外,我认为根本没有理由调用
response.EnsureSuccessStatusCode()在服务器端…@Liel,谢谢你的发现。但实际上我得到了空引用异常,因为操作总是接收空值。我已经在我的应用程序中指定了这一点。好的,我相信您的XML和模型不同步。例如,看看
。您可以做的是构造模型对象,让web API从GET action方法为您序列化该对象,并将其与boots.xml中的内容进行比较。但正如你所建议的,让我试一试。谢谢,运气不好。仍然将值获取为null。我是否使用了正确的内容类型和编码?
var xml = GlobalConfiguration.Configuration.Formatters.XmlFormatter;
            xml.UseXmlSerializer = true;