我正在尝试将旧版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.asax
中
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
这使其他所有内容都运行良好,但它会使用DataContracts
中断所有调用。如果我设置UseXmlSerializer = false;
它可以工作,但其他一切都会中断。
有没有办法只为遗留部分将其设置为false,或者是否有更好的方法来执行此操作?