0

我有以下 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。

任何帮助,将不胜感激。

谢谢

4

0 回答 0