ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用。

接下来几篇文章中您会了解以下内容:

ASP.NET MVC 6 中创建简单的web API。

如何从空的项目模板中启动,及添加控件到应用中。

如何配置 ASP.NET 5.0 管道。

在 IIS 外对立部署应用。

本文的目的是从空的项目开始,逐步讲解如何创建应用。当然,您也可以从“Starter Web” 模板开始,它默认包含了MVC 6、权限、记录等其他模块,同时也内置了有效的控制器和视图在其中。

创建空的 ASP.NET 5 项目

打开 Visual Studio 2015。点击 File 菜单,选择 New > Project。

在 New Project 对话框中,点击 Templates > Visual C# > Web,选择 ASP.NET Web Application 项目模板。命名为 "TodoApi",点击 OK。

在 New ASP.NET Project 对话框中,选择 "ASP.NET 5.0 Empty" 模板。

下面的效果图展示了工程结构:

工程包含以下文件:

global.json 包含了解决方案级别的设置,允许工程到工程之间的引用。

project.json 包含了工程级别的设置。

Project_Readme.html 为 readme 文件。

Startup.cs 包含启动和配置代码。

Startup.cs 文件中的Startup 类,配置了 ASP.NET 需求管道。当你使用空的项目模板,Startup 类不会有任何实质性的代码加入到管道中:

publicclassStartup

{

publicvoidConfigure(IApplicationBuilderapp)

{

//Nothinghere!

}

}

现在,你可以运行应用了,但当前的应用没有任何功能。接下来我们会模拟"Starter Web" 项目模板来添加功能,例如 MVC 6、Entity Framework、身份验证、记录等功能。

添加欢迎界面

打开 project.json 文件。该文件包含了工程设置内容。dependencies 部分用于标注需要的NuGet 包和类库。添加 Microsoft.AspNet.Diagnostics 包到列表中:

"dependencies":{

"Microsoft.AspNet.Server.IIS":"1.0.0-beta1",

//Addthis:

"Microsoft.AspNet.Diagnostics":"1.0.0-beta1"

},

输入时, Visual Studio 会提供智能提示:

接下来,打开 Startup.cs 文件,添加以下代码:

usingSystem;

usingMicrosoft.AspNet.Builder;



namespaceTodoApi

{

publicclassStartup

{

publicvoidConfigure(IApplicationBuilderapp)

{

//Newcode

app.UseWelcomePage();

}

}

}

点击 F5 运行,Visual Studio 启动浏览器,打开了 http://localhost:port/,端口号是一个Visual Studio随机分配的数字。运行效果如下:

欢迎界面是检验运行效果的快速入口,无需编写代码。

创建 Web API

在本章节中,您将创建一个 ToDo 事项管理列表功能API。首先,我们需要添加 ASP.NET MVC 6 到应用中。

添加 MVC 6 到 project.json 文件的依赖列表中:

"dependencies":{

"Microsoft.AspNet.Server.IIS":"1.0.0-beta1",

"Microsoft.AspNet.Diagnostics":"1.0.0-beta1",

//New:

"Microsoft.AspNet.Mvc":"6.0.0-beta1"

},

接下来,添加 MVC 需求管道到 Startup.cs 文件中,

使用 using 声明Microsoft.Framework.DependencyInjection。

添加以下方法到 Startup 类中。

publicvoidConfigureServices(IServiceCollectionservices)

{

services.AddMvc();

}

下面这段代码添加了 MVC 6 需要的所有依赖项,会自动在启动时调用ConfigureServices

publicvoidConfigure(IApplicationBuilderapp)

{

//New:

app.UseMvc();

}

以下是完整的 Startup 类代码:

usingSystem;

usingMicrosoft.AspNet.Builder;

usingMicrosoft.AspNet.Http;

//Newusing:

usingMicrosoft.Framework.DependencyInjection;


namespaceTodoApi

{

publicclassStartup

{

//Addthismethod:

publicvoidConfigureServices(IServiceCollectionservices)

{

services.AddMvc();

}


publicvoidConfigure(IApplicationBuilderapp)

{

//New:

app.UseMvc();

app.UseWelcomePage();

}

}

}

添加 Model

model 代表应用的数据域。在本示例中,model 中存储 ToDo 项。 添加以下类到项目中:

usingSystem.ComponentModel.DataAnnotations;


namespaceTodoApi.Models

{

publicclassTodoItem

{

publicintId{get;set;}

[Required]

publicstringTitle{get;set;}

publicboolIsDone{get;set;}

}

}

为了保持项目的整洁,我创建了 Models 文件夹用于存放 Model 类,当然这不是必要的操作。

添加 Controller

添加 controller 类用于处理 HTTP 请求。添加以下类到项目中:

usingMicrosoft.AspNet.Mvc;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingTodoApi.Models;


namespaceTodoApi.Controllers

{


[Route("api/[controller]")]

publicclassTodoController:Controller

{

staticreadonlyList<TodoItem>_items=newList<TodoItem>()

{

newTodoItem{Id=1,Title="FirstItem"}

};


[HttpGet]

publicIEnumerable<TodoItem>GetAll()

{

return_items;

}


[HttpGet("{id:int}",Name="GetByIdRoute")]

publicIActionResultGetById(intid)

{

varitem=_items.FirstOrDefault(x=>x.Id==id);

if(item==null)

{

returnHttpNotFound();

}


returnnewObjectResult(item);

}


[HttpPost]

publicvoidCreateTodoItem([FromBody]TodoItemitem)

{

if(!ModelState.IsValid)

{

Context.Response.StatusCode=400;

}

else

{

item.Id=1+_items.Max(x=>(int?)x.Id)??0;

_items.Add(item);


stringurl=Url.RouteUrl("GetByIdRoute",new{id=item.Id},

Request.Scheme,Request.Host.ToUriComponent());


Context.Response.StatusCode=201;

Context.Response.Headers["Location"]=url;

}

}


[HttpDelete("{id}")]

publicIActionResultDeleteItem(intid)

{

varitem=_items.FirstOrDefault(x=>x.Id==id);

if(item==null)

{

returnHttpNotFound();

}

_items.Remove(item);

returnnewHttpStatusCodeResult(204);//201NoContent

}

}

}

同样,我创建了 Controllers 文件夹用于存储 controller。

在后续的章节中我们将进一步阐述关于 Controller 的代码。以下是 controller 实现的一些基础功能:

例如,下面是获取 ToDo 项目的 HTTP 请求的:

GEThttp://localhost:5000/api/todoHTTP/1.1

User-Agent:Fiddler

Host:localhost:5000

下面是 response 流:

HTTP/1.1200OK

Content-Type:application/json;charset=utf-8

Server:Microsoft-HTTPAPI/2.0

Date:Thu,30Oct201422:40:31GMT

Content-Length:46


[{"Id":1,"Title":"FirstItem","IsDone":false}]

后续章节中我们将阐述以下内容:

在配置方法中添加以下代码,UseMvc 方法用于添加 MVC 6 到管道。

如何配置 ASP.NET 5.0 管道。

在 IIS 外对立部署应用。

原文链接:Create a Web API in MVC 6

系列文章目录:

ASP.NET 5系列教程 (一):领读新特性

ASP.NET 5系列教程 (二):Hello World

ASP.NET 5系列教程 (三):view components介绍

ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云

ASP.NET 5系列教程 (五):在Visual Studio 2015中使用Grunt、Bower开发Web程序