私は次の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 を処理できません。
どんな助けでも大歓迎です。
ありがとう