簡體   English   中英

如何為使用其他API的Web服務創建控制器

[英]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個位置。

您可以創建WCF Rest WebService來從應用程序中分離出功能。 看一下這篇關於創建其余完整Web服務的文章

您可以輕松地使用Web Api 2.0。 這是它的初衷,非常適合您的用例。

Microsoft 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
    }

有關復雜類型和Web API的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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