[英]How to decouple objects in MVC Web API service and apps which uses it?
[英]How to create a controller for a web service that uses another API
我已經閱讀了有關RESTFUL API的Microsoft教程,盡管我對如何創建RESTAPI有了一般的了解,但是我對應該做的事情一無所知。
方案:我有一個單獨的Windows程序,其中包含可以用C#編寫的API。 該計划的工作是安排一系列地點並返回這些地點的里程。 DLL用於此目的。 我想創建一個單獨的程序(C#中的RESTFUL Web服務),用戶可以通過URL輸入值來獲取里程。 用戶最多可以輸入2個或20個位置。 還可以使用不同類型的里程(模塊)來返回不同類型的里程(單獨的Windows程序可以處理此問題)。
位置將具有以下屬性:ID,城市,縣,州,郵政編碼。
我不確定如何執行此操作。 我班上應該是什么? 控制器中應該到底是什么? 我當時想我可以有一個單一的類來跟蹤位置的所有屬性。
我最關心的還是控制器。 我不確定如何編寫它,因為我不知道URI應該如何。 我認為類似/ mileagetype / loc1 / loc2 / loc3 / locx ...的uri可能太長,因為用戶最多可以輸入20個位置。
您可以輕松地使用Web Api 2.0。 這是它的初衷,非常適合您的用例。
您的Web API控制器將僅包含通過URI到外界的端點,然后您將向DLL獲取所有實際邏輯。
例如,在客戶端,他們可以向您傳遞包含您提到的所有屬性的整個復雜JSON對象。 在服務器端(在Web API項目內部),您可以有一個數據傳輸對象,其唯一目的是綁定到來自客戶端的JSON數據。
一個簡單的解決方案:
在服務器上,用於處理端點的控制器看起來像下面的示例,用於非常簡單的GET請求。
public class MileageServiceController : ApiController
{
// GET: api/MileageService?locations=100NewYork&locations=300NewJersey
public string Get([FromUri] String[] locations)
{
String value = String.Empty;
//TO DO - GOT TO DLL and get milage
foreach (String loca in locations)
{
//you could go to your DLL here
//value += DLL.GetMilage(loca.ID, loca.City, etc...
value += loca; //for testing
}
return value;
}
}
我不會太擔心URL會持續多久,這並不是一個真正的問題,因為它很可能是由使用JavaScript或任何其他編程語言實現的客戶端消費者生成的。
一個更優雅的解決方案:
對於更優雅的解決方案,您可以在服務器端API上創建DTO(數據傳輸對象)。 然后,您可以從那里通過POST從客戶端傳遞復雜的對象。
您的DTO可能如下所示:
public class Location
{
public int ID {get; set;}
public string City {get; set;}
public string County {get; set;}
public string State {get; set;}
public int ZipCode { get; set; }
}
您的控制器如下所示:
// POST: api/MileageService - accept an array of location DTO's
public void Post([FromBody]Location[] locations)
{
//Go to DLL and figure out milage for each DTO
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.