[英]Web-API Get with object
我創建了一個Web-API,我想獲取所有帶有參數BeginAddress(字符串),EndAddress(字符串),BegineDate(日期時間)的路由。 我使用這些屬性創建了一個新的Class SearchRoute。
我可以使用id或字符串執行普通的Getwith,但如何通過給對象執行Get? 這可能嗎?
是否可以對一個對象進行投遞/投遞,而不是要求退貨?
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(url + userid);
if (response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync();
List<Route> list = await SerializeService.Deserialize<List<Route>>(content);
return list;
}
return null;
}
Web API功能
public List<Route> GetAllByCity(SearchRoute sr)
{
return RouteDAO.GetAllByCity(sr);
}
更新:如果執行此操作,則Post不起作用,但是如果我創建一個新的控制器,它將起作用。
[HttpPost]
// POST api/route
public void Post([FromBody]Route route)
{
RouteDAO.Create(route);
}
// POST api/route
[HttpPost]
public List<Route> Post([FromBody]SearchRoute sr)
{
return RouteDAO.GetAllByCity(sr);
}
即使將復雜對象用作參數,我還是更喜歡使用GET。 如果您擔心URI的長度,請記住:
如果您以您為榜樣
public class SearchRoute {
public string BeginAddress {get;set;}
public string EndAddress {get;set;}
public DateTime BeginDate {get;set;}
}
[HttpGet]
public List<Route> Get([FromUri]SearchRoute sr)
{
return RouteDAO.GetAllByCity(sr);
}
在搜索時輸入Uri
結果查詢字符串:
?BeginAddress=Some beginning&EndAddress=Some ending&BeginDate=2016-01-01T16:40:00
同樣,即使沒有對象前綴/限定符,屬性也將自動解析並填充對象實例。
請注意,我沒有考慮將空格等特殊字符解析為網址轉義字符序列
總≈162個字符 或采取
考慮到允許的最大URL長度為2083個字符,這還不錯,因此,在此簡單示例中,您僅用完了7%的字符。
這可能是首選的方法,因為它符合RESTful API標准 ,在該標准下GET調用/動詞不會更改數據,而POST調用/動詞卻可以更改數據。
您可以通過在URI中使用復雜類型來傳遞對象。 您需要通過使用正確格式的查詢字符串來幫助Web API。 這將是一個示例:
?SearchRoute.BeginAddress=TheAddressValue&SearchRoute.EndAddress=TheAddressValue
但是,如果查詢字符串開始變得太大,則可能是交互模型不正確。
然后,在服務器中,應該讓Web API知道它應該在URI中查找值:
public List<Route> GetAllByCity([FromUri]SearchRoute sr)
{
return RouteDAO.GetAllByCity(sr);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.