使用 VS 2012 和 ASP.NET MVC 4 创建一个干净、占用空间最小的 ASP.NET WebAPI 项目
使用 VS 2012 和 ASP.NET MVC 4 创建一个干净、最小占用空间的 ASP.NET WebAPI 项目。
移除 Visual Studio 中标准 ASP.NET WebApi 项目中的臃肿和冗余
2013 年 8 月 14 日更新:一位读者报告了安装此处描述的项目模板时遇到的问题。我自己的经历是顺利的,从这篇帖子(此处和网络上的其他地方)的其他反馈来看,大多数人也是如此。我正在等待评论者提供更多信息,以确定问题可能是什么(我怀疑是 VS/Nuget 配置问题,或者他可能使用的是 Express 版本,这可能需要额外的步骤)。如果您遇到困难,请在评论中告知我。
Visual Studio 2012 随附的默认 WebApi 项目模板在某些方面提供了很多功能,但对于学习令人印象深刻的 WebApi 框架,或者构建一个精简、高效且占用空间最小的 API 项目来说,它并非理想选择。
在本文中,我们将探讨如何在 Visual Studio 中创建简单且最小化的 WebApi 项目模板。在下一篇文章中,我们将介绍如何将模板构建成一个简单但具有说明性的 WebApi 项目示例。
VS 2012 中的默认模板创建的项目**至少包含 40 个引用**,其中包括许多您可能不想要或不需要用于简单 API 项目的内容。此外,创建的项目还包含大量的脚本文件、图像、Nuget 包以及其他支持完整功能 MVC 站点的项,但并非所有 API 项目都需要。实际上,您的项目很可能只需要其中一小部分。
- 获取和安装空 WebApi 模板
- 从新模板创建空 WebApi 项目
- 更新 Nuget 包
- 添加 WebApi 跟踪(可选)
- 添加路由和过滤器
- 更新 Global.asax 文件
- 约定优于配置:添加 Models 和 Controllers 文件夹
- 设置适当的启动操作
- 克隆此帖子的源代码或下载 Zip 文件
默认 WebApi 项目在某些情况下很棒,但对许多情况来说则过于冗余
如果您认为我是在批评 ASP.NET 团队,那您就错了。远非如此。默认的 WebApi 项目预先构建了您需要的一切,以便快速启动大型复杂的 Web 服务/API 项目,包括用户界面的自更新 API 文档(这是项目加载的完整 MVC 站点的目的)。仅仅查看解决方案资源管理器,您就会对您获得的项目的规模有所了解,因为每个文件夹都基本上塞满了文件。
然而,如果您想从简单开始,这里有很多东西需要梳理,这可能会使弄清楚发生了什么变得相当困难。以下是如何解决这个问题。
一、从 Visual Studio Gallery 获取空 ASP.NET WebApi 项目模板
Nikos Baxevanis 撰写了一个非常出色的可安装的 WebApi 项目模板,它确实非常非常空。它安装到 VS 中,并可通过文件/新建项目菜单作为 ASP.NET MVC 4 模板使用。将模板安装到 VS 后,您可以创建一个非常空的 WebApi 项目。在添加一些有用的项后,我们仍然会得到一个依赖项少于一半、文件数量仅占标准 VS WebApi 模板项目一小部分的项目。
- 在此处下载安装程序
- 确保关闭所有 Visual Studio 实例
- 运行安装程序
二、创建空 WebApi 项目
现在,打开 Visual Studio。转到文件/新建项目,然后选择 ASP.NET MVC 4 Web 应用程序模板
然后,一旦您为项目命名并点击确定,您将看到此项目类型的可用模板。请注意,现在有一个空 WebApi 项目模板(以前没有)。
一旦点击确定,VS 将创建一个引用少得多的项目,并且没有任何随标准 WebApi 项目提供的额外内容。
此时,我们几乎完成了,但还差一点。
三、使其正常工作:更新空 WebApi 模板的 Nuget 包
自上次更新空 WebApi 模板以来,WebApi 已得到更新,因此我们需要更新我们项目中使用的包。在接下来的步骤中,我们将向项目中添加一些项,这些项依赖于最新的 WebApi 包。在 VS 中,转到**工具菜单 -> 库包管理器 -> 管理解决方案的包:**
更新列出的所有包。
四、使其正常工作:添加 Microsoft.AspNet.WebApi.Tracing 包(可选)
ASP.NET WebApi 项目通常包含跟踪功能,通过 Microsoft.AspNet.WebApi.Tracing
包可以使调试不那么令人不快。虽然不是必需的,但您可以考虑通过 Nuget 添加此包。再次打开**工具菜单 -> 库包管理器 -> 管理解决方案的包**,然后在搜索框中键入 WebApi.Tracing
。选择 Microsoft.AspNet.WebApi.Tracing
包,然后单击安装。
五、使其正常工作:添加 WebApi 路由和过滤器
现在您拥有了一个更精简的起点,您可能会想添加一些东西。为了利用 MVC 团队使用 WebApi 创建的强大功能(并遵循 MVC 强调约定优于配置的理念),我们将需要一些路由,并且可能(但并非必需)我们希望在项目组织中遵循一些 MVC 约定。
2013 年 9 月 9 日注:有关 ASP.NET 路由和路由自定义的更多信息,请参阅ASP.NET MVC 中的路由基础和ASP.NET MVC 中的路由自定义。
向项目中添加一个新文件夹,并将其命名为 **App_Start**(类似于默认 MVC 和/或 WebApi 项目模板中的名称)。然后右键单击该文件夹并选择“添加类”,将其命名为 **WebApiConfig.cs
**。将以下代码替换 VS 在类中创建的默认代码(请注意这是一个静态类)。此类将设置默认路由约定,类似于任何其他 ASP.NET MVC 项目。请注意替换文件顶部的 using
语句以及代码正文。
WebApiConfig 类代码
using System; using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace EmptyWebApiProject.App_Start { public static class WebApiConfig { public const string DEFAULT_ROUTE_NAME = "MyDefaultRoute"; public static void Register(HttpConfiguration config) { config.Routes.MapHttpRoute( name: DEFAULT_ROUTE_NAME, routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); config.EnableSystemDiagnosticsTracing(); } } }
现在,添加另一个类,并将其命名为 **FilterConfig.cs
**。将以下代码复制到 VS 生成的代码中(如前所述,请确保添加 using
语句以及代码正文)。
FilterConfig 类代码
using System.Web; using System.Web.Mvc; namespace EmptyWebApiProject.app_start { public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } } }
六、使其正常工作:更新 Global.asax 文件以初始化路由和过滤器
现在我们已经添加了路由和过滤器文件,我们需要确保在 Global.asax
文件中初始化它们。打开该文件并将指示的行添加到现有代码中。
using System.Web; using System.Web.Http; using System.Web.Mvc; //Add this Using Statement: using EmptyWebApiTemplateProject.app_start; namespace EmptyWebApiProject { // Note: For instructions on enabling IIS6 or IIS7 classic mode, // visit http://go.microsoft.com/?LinkId=9394801 public class WebApiApplication : HttpApplication { protected void Application_Start() { AreaRegistration.RegisterAllAreas(); // Add these two lines to initialize Routes and Filters: WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); } } }
七、添加 Models 文件夹和 Controllers 文件夹以维护约定
虽然不是必需的,但通过组织项目中的代码来遵循 ASP.NET/MVC 建立的约定是有意义的。对于我们在此创建的 API 项目,Models 将像往常一样代表我们的数据。但是,与标准 MVC 项目不同的是,在这种情况下,Controllers 将都继承自 **System.Web.Http.ApiController
**,而不是 **System.Web.Mvc.Controller
**。暂时,按照下图所示添加文件夹,现在我们拥有了一个大大简化的 WebApi 项目结构。
带有添加的 Models 和 Controllers 文件夹的解决方案资源管理器
八、设置适当的启动操作并注意服务器属性
由于我们正在构建一个最小化的 API 服务而不是一个网站,我们可能希望修改在 Visual Studio 中运行项目时发生的情况。除非(或直到)您打算让您的 API 项目显示一个主页,否则您可能需要考虑修改运行时属性设置,以便 VS 在调试时不会尝试在本地浏览器中打开您的网站。虽然项目仍将在您在 Visual Studio 中配置的任何开发服务器上正常运行,但您的默认浏览器将尝试打开页面并显示错误,这可能会分散注意力。
在解决方案资源管理器中,双击“项目属性”文件夹。这将打开项目设置。单击“Web”选项卡。您的默认 Web 设置可能如下所示:
默认 VS 启动操作设置
注意高亮显示的项。我们不希望打开页面(除非您打算为项目添加一个),所以我们想更改它。请选择“不打开页面 . . .”选项。
修改后的 VS 启动操作设置
当您在此处时,向下滚动窗口,并注意服务器设置。默认情况下,通常会使用 Visual Studio 随附的本地 IIS Web 服务器/IIS Express。这没问题,但请注意项目 URL,特别是端口设置。在调试时从外部使用 API 时,您将需要使用此 URL。或者,您可以选择切换到 Visual Studio 开发服务器并手动指定一个端口。无论哪种情况,当您在调试时从外部项目调用您的 API 项目时,您都需要将其用作根 URL。
本地调试的默认服务器设置
从源克隆此项目或下载为 Zip 文件
您可以从我的 Github 仓库克隆我们在这里构建好的项目,或者下载 Zip 文件。请注意,仓库有点简陋(特别是当您导航到“packages”目录时),因为我包含了所有必需的 Nuget 包,以便项目能够开箱即用。
请注意,克隆此项目不会为您提供帖子中介绍的已安装模板。但您可以克隆此项目,并适当地重命名,然后进行构建以满足您的需求。另外,如果您发现有改进它的方法,请给我发送一个 Pull Request。我可能会遗漏重要内容,并犯一些愚蠢的错误!
准备好构建了吗?
到目前为止,我们已经探讨了如何安装空 WebApi 模板,并添加了最小化的附加项,如路由、过滤器和熟悉的文件夹结构,以使符合 MVC 的 API 项目准备好构建。接下来,我们将使用我们精简的 WebApi 模板构建一个基本的示例项目。
下一篇:使用最小 WebApi 项目构建 WebApi 示例
额外资源
- ASP.NET MVC 中的路由基础
- ASP.NET Web API 中的路由基础
- ASP.NET MVC 中的自定义路由
- ASP.NET MVC:使用 SQL CE 数据库配置 ASP.NET MVC 4 成员资格