0

私は次のAPIコントローラーを持っています

public class TriggerController : ApiController
    {
        [HttpPost]
        [ActionName("fileimport")]
        public int CreateFileImportTrigger([FromBody]ITrigger _object)
        {
            return scheduler.CreateFileImportTrigger(_object);
        }
.....
...

私の WEBApiConfig はそうで、呼び出しは 3 番目のルートと一致します。

  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 ヘッダーで 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