使用与xml命名空间的数据协定时,Web api对象为null

时间:2014-08-05 22:16:51

标签: c# xml asp.net-web-api

我正在尝试将旧版API调用集成到新的Web API项目中。旧的调用所有与数据成员使用的数据合同。我想我的一切都匹配了,但我的对象总是无效。如果我在fiddler中尝试它时从调用中删除命名空间就可以了。但是,我无法修改进来的电话。

这是控制器代码。在此代码中,projectTaskImportBatch以null形式出现。

[HttpPost]
[Route("ProjectTaskImportBatch")]
public IHttpActionResult BatchImportXltProjectTask(ProjectTaskImportBatch projectTaskImportBatch)
{
   try
   {
      var xltProjectTaks = XltProjectCore.BatchImportXltProjectTask(projectTaskImportBatch, Token);
      return Ok(xltProjectTaks);
   }
   catch (Exception ex)
   {
      throw ExceptionHandler.ResponseException(Request, ex);
   }
}

这是我试图填充的对象。

 [DataContract(Namespace = "http://col4.com/api/v2", Name = "ProjectTaskImportBatch")]
 public class ProjectTaskImportBatch
 {
    [DataMember(Order = 1)]
    public string ProjectID { get; set; }
    [DataMember(Order = 2)]
    public string Tasks { get; set; }
    [DataMember(Order = 3)]
    public Int16 LastBatch { get; set; }
}

这是我从Fiddler那里打来的电话。如果我删除xmlns =“http://col4.com/api/v2”代码可以正常工作。但这不是一种选择。

POST http://localhost: HTTP/1.1
Accept: */*
Content-Type: application/xml;
Accept-Language: en-US
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/7.0; .NET4.0E; .NET4.0C; InfoPath.3)
Host: localhost:
Content-Length: 261
Connection: Keep-Alive
Pragma: no-cache
Authorization:

<ProjectTaskImportBatch xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://col4.com/api/v2">
<ProjectID>(Project ID here)</ProjectID>
<Tasks>1|Testing Namespace||||||||||</Tasks>
<LastBatch>1</LastBatch>
</ProjectTaskImportBatch>

已编辑 - 已添加信息:

我想我发现了这个问题。我把这段代码放在我的Global.asaxGlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;

这使其他所有内容都运行良好,但它会使用DataContracts中断所有调用。如果我设置UseXmlSerializer = false;它可以工作,但其他一切都会中断。

有没有办法只为遗留部分将其设置为false,或者是否有更好的方法来执行此操作?

0 个答案:

没有答案