[英]Passing optional data to REST API
我們有一個桌面客戶端和一個REST API。 對於幾個POST REST調用,我們希望從客戶端向API傳遞關聯GUID,該GUID用於關聯與同一用戶交互相關的日志條目。
此參數是可選的,並且必須向后兼容,如果省略,則不會失敗。 在保持代碼干凈的同時,可以通過哪些選項進行傳遞?
我擔心如果我這樣說:
例如,現有方法是:
[HttpPost]
public HttpResponseMessage SaveData([FromBody]DataModel model)
{
...
}
我覺得我錯過了一些東西。 哪里是最好的地方?
這很大程度上取決於您的api action
是Get
還是Post
,如果您使用Get動作,則可以將參數放在標頭中,也可以在route
配置中使用默認值作為參數,如下所示:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { **id = RouteParameter.Optional** }
);
如果使用的是Post
操作,則可以輕松地在方法原型中使用默認值:示例:
[HttpPost]
public object DoSomething(int logEntryIndex=0)
{
return "Something";
}
但我強烈建議您始終使用對象作為參數。 然后,將任何屬性[作為新參數]添加到類中非常容易,並且您永遠不會遇到此類問題
[HttpPost]
public object DoSomething(MyParam parameter)
{
return "Something";
}
public class MyParam
{
// prop1
// prop2
}
您可以將URL的關聯GUID作為可選參數傳遞,這樣它將向后兼容,干凈並且不會污染您的數據模型。 例如:
[HttpPost]
[Route("api/Contact/{correlationId:Guid?}")]
public HttpResponseMessage SaveData([FromBody]DataModel model, [FromUri] Guid? correlationId = null)
{
//code to handle request
}
從MSDN:
您可以通過向route參數添加問號來使URI參數為可選。 如果route參數是可選的,則必須為method參數定義一個默認值。
更多信息在這里
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.