【问题标题】:RestSharp / ASP.NET WebAPI - Using POST with url parametersRestSharp / ASP.NET WebAPI - 使用带有 url 参数的 POST
【发布时间】:2013-03-15 23:41:32
【问题描述】:

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

我的期望是,向http://myhost/api/referencedata/sync?referencedatatype=countries 发送一个包含 IEnumerable 的正文的 POST 请求。如果我删除客户端站点上的 UrlSegment 参数和 Web 服务站点上的第二个参数,它就会起作用。

如何将正文与有效负载和其他 URL 参数结合起来?

【问题讨论】:

    标签: c# asp.net-web-api restsharp


    【解决方案1】:

    您可以如下定义您的操作方法,

    [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)。您定义的路由将“同步”作为 Id(将被忽略,因为它不是您的操作中的参数)。

    您还必须指定内容类型标头,以便 Web API 可以选择正确的格式化程序(例如 json 或 xml)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-30
      相关资源
      最近更新 更多