C# 如何为使用其他API的web服务创建控制器
我已经阅读了微软关于RESTfulAPI的教程,虽然我对如何创建RESTfulAPI有一个大致的了解,但我对我应该做什么还不清楚 场景:我有一个单独的Windows程序,其中包含一个可以使用C#编写的API。该程序的工作是获取一系列位置并返回这些位置的里程数。为此使用了DLL。我想创建一个单独的程序(C#中的RESTFUL web服务),用户可以通过URL输入值以获得里程数。用户最多可以输入2个或20个位置。还有不同类型的里程(模块),可用于返回不同类型的里程(单独的windows程序处理此问题) 位置将具有以下属性:ID、城市、县、州、邮政编码 我不太确定如何实现这一点。我班上应该有什么?我的控制器中到底应该有什么?我想我可以有一个类来跟踪一个位置的所有属性C# 如何为使用其他API的web服务创建控制器,c#,asp.net,web-services,rest,visual-studio-2012,C#,Asp.net,Web Services,Rest,Visual Studio 2012,我已经阅读了微软关于RESTfulAPI的教程,虽然我对如何创建RESTfulAPI有一个大致的了解,但我对我应该做什么还不清楚 场景:我有一个单独的Windows程序,其中包含一个可以使用C#编写的API。该程序的工作是获取一系列位置并返回这些位置的里程数。为此使用了DLL。我想创建一个单独的程序(C#中的RESTFUL web服务),用户可以通过URL输入值以获得里程数。用户最多可以输入2个或20个位置。还有不同类型的里程(模块),可用于返回不同类型的里程(单独的windows程序处理此问题
我最关心的也是控制员。我不知道如何编写它,因为我不知道URI应该是怎样的。我认为像/mileagetype/loc1/loc2/loc3/locx这样的uri。。。可能太长了,因为用户最多可以输入20个位置。您可以创建WCF Rest WebService以将功能与应用分离。在创建rest完整Web服务时,请看一下这一点,您可以轻松地使用Web Api 2.0实现这一点。这正是它的目的,并且非常适合您的用例 您的web API控制器将只包含端点,通过URI连接到外部世界,然后您将转到DLL获取所有实际逻辑 例如,在客户端,他们可以向您传递一个完整的复杂JSON对象,该对象包含您提到的所有属性。在服务器端(在WebAPI项目中),您可以拥有一个数据传输对象,其唯一目的是绑定到来自客户端的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
}
您的控制器可以如下所示:
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
}
好的,我喜欢这个教程。事实上,它发现它比微软的要好。哈哈。但是,如果您不创建数据库呢?如果您只是让另一个API计算数据呢?Rest WebServices是无状态的,但是如果您不想使用db,那么您可以在项目中使用简单的硬代码值。很抱歉问21个问题。。。但是最好让用户的客户端以/calculate/mileagetype/loc1/loc2/loc3或/calculate/mileagetype的形式运行URI吗?loc=1&loc=2&loc=3。。。?或者两者都没有?我担心的是,用户一次最多可以输入20个位置。此外,本教程似乎只演示了如何执行第一个,而不是后一个。特别是,您可以使用该文章中的get方法。您知道有任何类似于您提供的教程,在Visual Studio 2012中更为循序渐进吗?您知道如何添加DLL并在代码中使用它吗?当然知道。在创建web api项目后,您可以像添加任何其他DLL一样在visual studio中添加它。转到“引用”并右键单击“添加”。然后在控制器内部为其名称空间添加using语句。然后从中找到所需的函数。