私は次のASP.NETWebAPIバインディングを持っています:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new {id = RouteParameter.Optional}
);
そして、私のコントローラーは次のようになります。
public class ReferenceDataController : BaseController
{
[RequireUserToken(ApprovedDeviceToken = true, ValidUserToken = true)]
[HttpPost]
public IEnumerable<SynchronizeItem<IReferenceDataItem>> Sync([FromBody]IEnumerable<SynchronizeItem<IReferenceDataItem>> clientSyncItems, [FromUri]int referenceDataType)
{
// my code
}
クライアントサイトでは、次のコードを使用してリクエストを送信します。
var client = new RestClient (baseUrl);
var request = new RestRequest (resource, method);
request.XmlSerializer = new JsonSerializer ();
request.RequestFormat = DataFormat.Json;
request.AddHeader ("X-Abc-DeviceToken", deviceToken);
if (!string.IsNullOrWhiteSpace (userToken))
request.AddHeader ("X-Abc-UserToken", userToken);
if (payload != null)
request.AddBody (payload);
if (parameters != null)
{
foreach (var parameter in parameters)
{
request.AddUrlSegment(parameter.Key, parameter.Value);
}
}
var response = client.Execute<T> (request);
http://myhost/api/referencedata/sync?referencedatatype=countries
私の期待は、 IEnumerableを含む本文を使用してPOSTリクエストをに送信することです。クライアントサイトのUrlSegmentパラメーターとWebサービスサイトの2番目の引数を削除すると、機能します。
本文をペイロードおよび追加のURLパラメーターと組み合わせるにはどうすればよいですか?