我有以下 APi 控制器
public class TriggerController : ApiController
{
[HttpPost]
[ActionName("fileimport")]
public int CreateFileImportTrigger([FromBody]ITrigger _object)
{
return scheduler.CreateFileImportTrigger(_object);
}
.....
...
我的 WEBApiConfig 就是这样,调用匹配第三条路由。
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "ApiById",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"^[0-9]+$" }
);
config.Routes.MapHttpRoute(
name: "ApiByName",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: null,
constraints: new { name = @"^[a-z]+$" }
);
config.Routes.MapHttpRoute(
name: "ApiByAction",
routeTemplate: "api/{controller}/{action}",
defaults: new { _object = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
ITrigger 就是这样定义的。
public interface ITrigger
{
string Name{ get; set; }
string FilePath{ get; set; }
string TriggeredJobEntityCode{ get; set; }
int ID{ get; set; }
TriggerTypes Type{ get; set; }
string SubmitDate{ get; set; }
DateTime SubmitTime{ get; set; }
IJob[] Jobs { get; set; }
}
和
我在 Http Header 中将 Content-Type 指定为 application/json
我发布的身体是这样的
{
"Name": "FileEventTrigger",
"FilePath": "C:\\Users\\file.txt",
"TriggeredJobEntityCode": null,
"Jobs": [
{
"ID": 1643,
"TemplateID": 1643,
"Name": "SomeJob",
"SubmitToRunTime": "0001-01-01T00:00:00",
"Parameters": [
{
"Name": "Seconds",
"Value": "30",
"DefaultValue": "30",
"isRequired": true,
"DataType": "Integer"
}
]
}
],
"ID": 1,
"Type": 0,
"SubmitDate": "7/21/2013",
"SubmitTime": "0001-01-01T00:00:00"
}
我在 CreateFileImportTrigger 方法的开头有一个断点,我在其中检查 _object 的值,并在我发布调用后显示为“null”。所以某处 WebApi 应用程序没有读取正文并将其序列化为 _object 参数。该服务正在返回 ITrigger 对象,只是无法处理 POST。
任何帮助,将不胜感激。
谢谢