我已经阅读了微软关于RESTFUL API的教程,虽然我对如何创建一个API有一般性的了解,但我对我应该做什么感到很遗憾。
场景:我有一个单独的Windows程序,其中包含可以在C#中编写的API。该计划的工作是采取一系列地点并返回这些地点的里程数。 DLL用于此目的。我想创建一个单独的程序(C#中的RESTFUL Web服务),用户可以通过URL输入值来获取里程。用户最多可以输入2或20个位置。还有不同类型的里程(模块)可用于返回不同类型的里程(单独的Windows程序处理此问题)。
位置将具有以下属性:ID,城市,县,州,邮政编码。
我不确定如何实现这一点。我班上应该怎么办?我的控制器到底应该是什么?我以为我可以有一个单独的类来跟踪某个位置的所有属性。
我最关心的还有控制器。我不知道怎么写它,因为我不知道URI应该如何。我认为uri like / mileagetype / loc1 / loc2 / loc3 / locx ...可能过于冗长,因为用户最多可以输入20个位置。
答案 0 :(得分:1)
您可以创建WCF Rest Web服务以从您的应用中分离出功能。请查看此article以创建restful webservices
答案 1 :(得分:0)
您可以轻松使用Web Api 2.0。这是它的用途,非常适合您的用例。
Getting started with Web Api 2.0 from Microsoft
您的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;
}
}
我不会过分担心网址会花多长时间,因为这不是真正的问题 它很可能是由客户消费者生成的,它将用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
}