簡體   English   中英

RestSharp / ASP.NET WebAPI-使用帶有url參數的POST

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM