65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 VS 2012 和 ASP.NET MVC 4 创建一个干净、占用空间最小的 ASP.NET WebAPI 项目

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.70/5 (23投票s)

2013年7月4日

CPOL

9分钟阅读

viewsIcon

161817

使用 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 项目在某些情况下很棒,但对许多情况来说则过于冗余

如果您认为我是在批评 ASP.NET 团队,那您就错了。远非如此。默认的 WebApi 项目预先构建了您需要的一切,以便快速启动大型复杂的 Web 服务/API 项目,包括用户界面的自更新 API 文档(这是项目加载的完整 MVC 站点的目的)。仅仅查看解决方案资源管理器,您就会对您获得的项目的规模有所了解,因为每个文件夹都基本上塞满了文件。

standard-web-api-template-solution-explorer

然而,如果您想从简单开始,这里有很多东西需要梳理,这可能会使弄清楚发生了什么变得相当困难。以下是如何解决这个问题。

一、从 Visual Studio Gallery 获取空 ASP.NET WebApi 项目模板

Nikos Baxevanis 撰写了一个非常出色的可安装的 WebApi 项目模板,它确实非常非常空。它安装到 VS 中,并可通过文件/新建项目菜单作为 ASP.NET MVC 4 模板使用。将模板安装到 VS 后,您可以创建一个非常空的 WebApi 项目。在添加一些有用的项后,我们仍然会得到一个依赖项少于一半、文件数量仅占标准 VS WebApi 模板项目一小部分的项目。

二、创建空 WebApi 项目

现在,打开 Visual Studio。转到文件/新建项目,然后选择 ASP.NET MVC 4 Web 应用程序模板

file-new-webapi-standard

然后,一旦您为项目命名并点击确定,您将看到此项目类型的可用模板。请注意,现在有一个空 WebApi 项目模板(以前没有)。

select-empty-web-api-project

一旦点击确定,VS 将创建一个引用少得多的项目,并且没有任何随标准 WebApi 项目提供的额外内容。

empty-web-api-template-solution-explorer

此时,我们几乎完成了,但还差一点。

三、使其正常工作:更新空 WebApi 模板的 Nuget 包

自上次更新空 WebApi 模板以来,WebApi 已得到更新,因此我们需要更新我们项目中使用的包。在接下来的步骤中,我们将向项目中添加一些项,这些项依赖于最新的 WebApi 包。在 VS 中,转到**工具菜单 -> 库包管理器 -> 管理解决方案的包:**

EmptyWebApiTemplate.sln - Manage NuGet Packages

更新列出的所有包。

四、使其正常工作:添加 Microsoft.AspNet.WebApi.Tracing 包(可选)

ASP.NET WebApi 项目通常包含跟踪功能,通过 Microsoft.AspNet.WebApi.Tracing  包可以使调试不那么令人不快。虽然不是必需的,但您可以考虑通过 Nuget 添加此包。再次打开**工具菜单 -> 库包管理器 -> 管理解决方案的包**,然后在搜索框中键入 WebApi.Tracing。选择 Microsoft.AspNet.WebApi.Tracing 包,然后单击安装。

WebApiTracing - Manage NuGet Packages

五、使其正常工作:添加 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 文件夹的解决方案资源管理器

added-models-and-controllers-folder

 

八、设置适当的启动操作并注意服务器属性

由于我们正在构建一个最小化的 API 服务而不是一个网站,我们可能希望修改在 Visual Studio 中运行项目时发生的情况。除非(或直到)您打算让您的 API 项目显示一个主页,否则您可能需要考虑修改运行时属性设置,以便 VS 在调试时不会尝试在本地浏览器中打开您的网站。虽然项目仍将在您在 Visual Studio 中配置的任何开发服务器上正常运行,但您的默认浏览器将尝试打开页面并显示错误,这可能会分散注意力。

在解决方案资源管理器中,双击“项目属性”文件夹。这将打开项目设置。单击“Web”选项卡。您的默认 Web 设置可能如下所示:

默认 VS 启动操作设置

default-vs-web-project-settings 

注意高亮显示的项。我们不希望打开页面(除非您打算为项目添加一个),所以我们想更改它。请选择“不打开页面 . . .”选项。

修改后的 VS 启动操作设置

modified-vs-web-project-settings

当您在此处时,向下滚动窗口,并注意服务器设置。默认情况下,通常会使用 Visual Studio 随附的本地 IIS Web 服务器/IIS Express。这没问题,但请注意项目 URL,特别是端口设置。在调试时从外部使用 API 时,您将需要使用此 URL。或者,您可以选择切换到 Visual Studio 开发服务器并手动指定一个端口。无论哪种情况,当您在调试时从外部项目调用您的 API 项目时,您都需要将其用作根 URL。

本地调试的默认服务器设置

default-vs-port-settings

从源克隆此项目或下载为 Zip 文件

您可以从我的 Github 仓库克隆我们在这里构建好的项目,或者下载 Zip 文件。请注意,仓库有点简陋(特别是当您导航到“packages”目录时),因为我包含了所有必需的 Nuget 包,以便项目能够开箱即用。

请注意,克隆此项目不会为您提供帖子中介绍的已安装模板。但您可以克隆此项目,并适当地重命名,然后进行构建以满足您的需求。另外,如果您发现有改进它的方法,请给我发送一个 Pull Request。我可能会遗漏重要内容,并犯一些愚蠢的错误!

准备好构建了吗?

到目前为止,我们已经探讨了如何安装空 WebApi 模板,并添加了最小化的附加项,如路由、过滤器和熟悉的文件夹结构,以使符合 MVC 的 API 项目准备好构建。接下来,我们将使用我们精简的 WebApi 模板构建一个基本的示例项目。

下一篇:使用最小 WebApi 项目构建 WebApi 示例

额外资源

© . All rights reserved.