好的,这就去。我将描述两种方法来完成它,最简单的方法:
1. ASP.NET WebApi
您必须创建一个新的 ASP.NET MVC4 项目(无论是发布版还是 RC),选择“WebApi”作为选项:
您将准备好模板。现在您右键单击“控制器”文件夹,然后添加 -> 控制器:
并填写它,例如:
public class ActualResourceController : ApiController
{
public string Get()
{
return "Hey there! Getting the resource...";
}
}
默认路由在 Global.asax 中,当你去定义WebApiConfig.Register(...)
方法时,你会看到默认路由是host/api/controller
. 让我们尝试一下,当您启动项目并进入(在我的情况下,端口由开发服务器自动选择)http://localhost:23030/api/ActualResource
时,您将获得:
<string>Hey there! Getting the resource...</string>
WebApi 根据Accept
标头返回 JSON 或 XML,如果您希望 JSON 成为唯一/默认值,请查看此链接。
您当然可以创建一个类并返回它,它将以类似的方式序列化为 XML/JSON,您将在下面使用 ServiceStack 看到。
2.服务栈
现在,ServiceStack 是功能强大的开源 REST Web 服务框架。它的工作方式与 WebApi 有点不同,这里有一个简单的介绍(虽然文档很好):
创建常规的 ASP.NET MVC 项目(在我的例子中,MVC4) - 你将有一个空模板:
然后启动包管理器控制台并输入(如文档建议的那样)Install-Package ServiceStack.Host.Mvc
,这将为您提供一个带有教程应用程序的 ServiceStack 项目模板,如果您愿意,您可以稍后将其删除。
但首先,ServiceStack 在 DTO、Request-Response 对象上工作。因此,让我们创建它们,ActualResource
将作为请求和ActualResourceResponse
响应的类。由于您在请求中没有参数,因此第一个是微不足道的:
public class ActualResource
{
}
任何参数都是自动属性。现在回应:
public class ActualResourceResponse
{
public string ResourceName { get; set; }
}
以及服务类本身:
public class ActualResourceService : Service
{
public object Get(ActualResource request)
{
return new ActualResourceResponse {
ResourceName = "Hi! It's the resource name." };
}
}
string
您当然可以出于当前目的返回裸机,它仍然可以正常工作。
现在在 ServiceStack 创建的模板中,一切都发生在 AppHost.cs 文件中,让我们看一下并稍微修改一下:
Routes
.Add<Hello>("/hello")
.Add<Hello>("/hello/{Name*}")
.Add<Todo>("/todos")
.Add<Todo>("/todos/{Id}") //everything up to here are a template/tutorial routes, you can safely remove them
.Add<ActualResource>("/actualResource"); //and here you add a route to your own service
为了让它工作,你必须去 Global.asax 并注释掉整WebApiConfig.Register(GlobalConfiguration.Configuration)
行,然后进入RouteConfig.RegisterRoutes
方法并添加:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("api/{*pathInfo}"); // <<<---- this line
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
需要更多的管道,但它仍然不错。
现在当你启动服务时,在 下localhost:whateverport/api/actualResource
,你会得到熟悉的字符串,这是一个截图:
ServiceStack 可以序列化为各种格式,所以如果你在 下http://localhost:yourPort/api/actualResource?format=json
,你会得到:
{"resourceName":"Hi! It's the resource name."}
如果?format=xml
,那么:
<ActualResourceResponse>
<ResourceName>Hi! It's the resource name.</ResourceName>
</ActualResourceResponse>
等等...
现在 ServiceStack 设置有点复杂,但它支持开箱即用的 Memcache,你可以在 Redis 中使用,你可以使用各种身份验证提供程序,所有这些在某些场景中可能非常有用。但是,正如本叔叔曾经说过的,“权力越大,责任越大”,而且设置阶段有点困难……
现在你可以选择任何你喜欢的,这两个是目前最简单的选项恕我直言。当然,这只是一个简单的入门教程,当您开始项目时,您将有机会深入探索这个主题。