[英]RestSharp / ASP.NET WebAPI - Using POST with url parameters
我具有以下ASP.NET WebAPI绑定:
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);
我的期望是,使用包含IEnumerable的正文将POST请求发送到http://myhost/api/referencedata/sync?referencedatatype=countries
。 如果删除客户端站点上的UrlSegment参数和Web服务站点上的第二个参数,则它将起作用。
如何将正文与有效负载和其他URL参数结合在一起?
您可以按照以下方式定义操作方法,
[RequireUserToken(ApprovedDeviceToken = true, ValidUserToken = true)]
[HttpPost]
public IEnumerable<SynchronizeItem<IReferenceDataItem>> Sync(IEnumerable<SynchronizeItem<IReferenceDataItem>> clientSyncItems, int referenceDataType)
{
// my code
}
没有BodyAttribute或FromUriAttribute。 这样,Web API将尝试使用MediaTypeFormatter将主体反序列化为clientSyncItems集合,以及查询字符串中的任何其他值类型(查询字符串中的referenceDataType)。 您定义的路由将以“ sync”作为ID(由于它不是您的操作中的参数,因此将被忽略)。
您还必须指定一个内容类型标头,以便Web API可以选择正确的格式程序(例如json或xml)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.