如何在Mvc 6 中创建 Web Api以及如何脱离IIS实现自我托管

微软推出的Asp.net vNext(asp.net 5.0)的其中的一个目标就是统一mvc 和web api 的框架。接下来我就演示一下一下几个内容

1,怎么在Asp.net mvc 6 中创建简单的web api。

2,怎么在空的项目工程中添加程序需要的组件。

3,怎么去配置Asp.net 5.0 管道。

4,怎么不通过IIS自我托管。

首先需要安装Visual Studio 2015 Preview,安装完之后,打开File >New >Project 然后 Template>C#>Web 新建一个Asp.Net Web Application 我命名为WebApiDemo:之后要选择 Asp.net 5 Empty 然后选择ok 就可以了 :

项目包括如下几个文件:

  • global.json 是包括整个solution的设置并且可以确保项目和项目之间的引用。
  • project.json 是这个工程的配置。
  • Startup.cs 是 startup 和 配置的代码。

在Startup.cs 中配置asp.net 的请求管道,

1 public class Startup
2 {
3 public void Configure(IApplicationBuilder app)
4 {
5 // Nothing here!
6 }
7 }

如果现在运行项目会发现什么也没有,那我们就先简单的添加一个欢迎页面,打开project.json 文件,这个文件可以配置我们这个程序的一些设置

 1 {
2 "webroot": "wwwroot",
3 "version": "1.0.0-*",
4 "exclude": [
5 "wwwroot"
6 ],
7 "packExclude": [
8 "**.kproj",
9 "**.user",
10 "**.vspscc"
11 ],
12 "dependencies": {
13 "Microsoft.AspNet.Server.IIS": "1.0.0-beta1"
14 },
15 "frameworks" : {
16 "aspnet50" : { },
17 "aspnetcore50" : { }
18 }
19 }

其中 "dependencies" 是一些Nuget 包和类库。我们先添加一个 Microsoft.AspNet.Diagnostics 。添加的时候会有只能提示。

"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
"Microsoft.AspNet.Diagnostics": "1.0.0-beta1"
},

然后再Startup.cs 中添加

1  public class Startup
2 {
3 public void Configure(IApplicationBuilder app)
4 {
5 // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
6
7 app.UseWelcomePage();
8 }
9 }

然后f5 运行 效果就出来了:

简单的创建了一个页面,接下来我们就进入正题,创建web api。

同样我们需要在project.json 中添加mvc 6的包

1   "dependencies": {
2 "Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
3 "Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
4 "Microsoft.AspNet.Mvc": "6.0.0-beta1"
5 },

接下来添加mvc 的请求管道在startup.cs 中

先引用 Microsoft.Framework.DependencyInjection,

然后添加如下方法:

1  public void ConfigureServices(IServiceCollection services)
2 {
3
4 services.AddMvc();
5 }

注意方法名不要错了,在程序启动的时候 mvc 框架会自动运行这个方法。

然后在 Startup.cs 的configure方法中添加代码: app.UseMvc();

然后新建一个Models文件夹 里面新建一个类Test

1     public class Test
2 {
3 public int Id { get; set; }
5 [Required]
6 public string Title { get; set; }
7 }

同样新建一个文件夹Controller 然后新建一个HomeController 的Wep Api 的 controller。

  1 namespace WebApiDemo.Controllers.Controllers
2 {
3 //注意这个写法,web api 的路由 不要忘了前面的api当然你可以随意的命名
4 [Route("api/[controller]")]
5 public class HomeController : Controller
6 {
7
8 public static List<Test> list = new List<Test>() {
9 new Test() { Id=1, Title="test1" },
10 new Test() { Id=2, Title="test2" }
11 };
12
13
14
15 // GET: api/values
16 //获得所有数据
17 [HttpGet]
18 public IEnumerable<Test> Get()
19 {
20 return list;
21 }
22
23 //按照id 查找数据 其中HttpGet 中 {id} 是模板 Name是路由的名字在mvc 5中的api 中HttpGet 是没有参数的。
24 // GET api/values/5
25 [HttpGet("{id}", Name = "getbyid")]
26 public IActionResult Get(int id)
27 {
28 var item = list.FirstOrDefault(p => p.Id.Equals(id));
29
30 if (item == null)
31 {
32 return HttpNotFound();
33 }
34
35 return new ObjectResult(item);
36
37 }
38
39 // POST api/values
40 //添加数据
41 [HttpPost]
42 public void Post([FromBody]Test value)
43 {
44 if (!ModelState.IsValid)
45 {
46 Context.Response.StatusCode = 400;
47 }
48 else
49 {
50 value.Id = list.Max(p => p.Id) + 1;
51 list.Add(value);
52
53 string url = Url.RouteUrl("getbyid", new { id = value.Id });
54
55 Context.Response.StatusCode = 201;
56 //添加成功之后,跳转看是否添加成功
57 Context.Response.Headers["Location"] = url;
58 }
59
60
61 }
62
63 //更新数据
64 // PUT api/values/5
65 [HttpPut("{id}")]
66 public IActionResult Put(int id, [FromBody]Test value)
67 {
68 if (!ModelState.IsValid)
69 {
70 return new HttpStatusCodeResult(500);
71 }
72 else
73 {
74 var item = list.FirstOrDefault(p => p.Id.Equals(id));
75
76 if (item == null)
77 {
78 return HttpNotFound();
79 }
80 else
81 {
82
83 value.Id = item.Id;
84
85 list.Remove(item);
86 list.Add(value);
87
88 return new ObjectResult(value);
89 }
90
91 }
92 }
93
94 //删除数据
95 // DELETE api/values/5
96 [HttpDelete("{id}")]
97 public IActionResult Delete(int id)
98 {
99
100 var item = list.FirstOrDefault(x => x.Id == id);
101 if (item == null)
102 {
103 return HttpNotFound();
104 }
105 list.Remove(item);
106 return new HttpStatusCodeResult(204);
107 }
108 }
109 }

该注释的我已经注释了。ok 看看效果:

我们发现每次f5 运行项目的时候都要通过运行IIS Express 我们才能运行我们的程序,那么有没有可能不通过IIS也能运行我们的程序呢?对于asp.net 5.0 来说答案是肯定的。 我们看一下是怎么做的? asp.net 5.0 可以托管到多种的web server 上 ,这里选择WebListener。即我们可以通过控制台来托管我们程序。

首先在 project.json 中添加Microsoft.AspNet.Server.WebListener包。另外还需要新加一个 "commands" 的设置完整的内容如下:

 1 {
2 "webroot": "wwwroot",
3 "version": "1.0.0-*",
4 "exclude": [
5 "wwwroot"
6 ],
7 "packExclude": [
8 "**.kproj",
9 "**.user",
10 "**.vspscc"
11 ],
12 "dependencies": {
13 "Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
14 "Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
15 "Microsoft.AspNet.Mvc": "6.0.0-beta1",
16 "Microsoft.AspNet.Server.WebListener": "1.0.0-beta1"
17 },
18 "frameworks": {
19 "aspnet50": { },
20 "aspnetcore50": { }
21 },
22 "commands": {
23 "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
24 }
25
26 }

然后右键项目属性的debug 选项 设置debug target 为web

然后F5运行:

这样程序就托管成功了。打开浏览器输入地址:

Ok成功了。关于asp.net 5.0 的一些新特性我还在研究,以后我还会发布相关的文章。Asp.net 5.0 这次的变动真的非常的让人激动。

Mvc 6 中创建 Web Api的更多相关文章

  1. 如何在Mvc 6 中创建 Web Api以及如何脱离IIS实现自我托管

    微软推出的Asp.net vNext(asp.net 5.0)的其中的一个目标就是统一mvc 和web api 的框架.接下来我就演示一下一下几个内容 1,怎么在Asp.net mvc 6 中创建简单 ...

  2. ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API

    ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ASP.NET MVC 6 中创建简单的web API. 如何从空的项目模板中启 ...

  3. 在 MVC6 中创建 Web API

    ASP.NET 5系列教程 (六): 在 MVC6 中创建 Web API   ASP.NET 5.0 的主要目标之一是统一MVC 和 Web API 框架应用. 接下来几篇文章中您会了解以下内容: ...

  4. 在ASP.NET Core 2.2 中创建 Web API并结合Swagger

    一.创建 ASP.NET Core WebApi项目 二.添加 三. ----------------------------------------------------------- 一.创建项 ...

  5. 在ASP.NET MVC中使用Web API和EntityFramework构建应用程序

    最近做了一个项目技术预研:在ASP.NET MVC框架中使用Web API和EntityFramework,构建一个基础的架构,并在此基础上实现基本的CRUD应用. 以下是详细的步骤. 第一步 在数据 ...

  6. MVC中使用Web API和EntityFramework

    在ASP.NET MVC中使用Web API和EntityFramework构建应用程序   最近做了一个项目技术预研:在ASP.NET MVC框架中使用Web API和EntityFramework ...

  7. 创建Web API并使用

    昨晚有教一个网友在ASP.NET MVC里,创建Web API和在MVC视图中应用此API. 可以在ASP.NET MVC中,创建程序的model: namespace Insus.NET.Model ...

  8. Asp.Net MVC Web API 中Swagger教程,使用Swagger创建Web API帮助文件

    什么是Swagger? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法 ...

  9. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

随机推荐

  1. ASP.NET 异步编程

    ASP.NET 异步编程 相关博文: 异步编程 In .NET(回味无穷!!!) ASP.NET sync over async(异步中同步,什么鬼?) 本来这篇博文想探讨下异步中的异常操作,但自己在 ...

  2. COM Interop

    1.MSDN上的文章:COM Interop教程 2.接口的三种类型:IDispatch.IUnknown和Dual 3.使用TlbImp来更灵活地自动生成RCW 4.托管事件基于委托,而非托管事件( ...

  3. WPF学习(9)样式和行为

    在asp.net世界中,我们的美工人员会为我们准备好静态页面,它注意包括三个部分:html.css和js.而在WPF世界里,也同样有着类似这三个部分的静态页面:Xaml.Style和Behaviors ...

  4. 定义你自己ViewGroup

    尊重原创:http://blog.csdn.net/yuanzeyao/article/details/40264433 好久都没有写文章了,如今利用周末的时间对一些知识进行总结.便于加深理解,今天我 ...

  5. Android Studio简单设置(转)

    Android Studio 简单设置 界面设置 默认的 Android Studio 为灰色界面,可以选择使用炫酷的黑色界面.Settings --> Appearance --> Th ...

  6. 一个简单的Java死锁示例(转)

    在实际编程中,要尽量避免出现死锁的情况,但是让你故意写一个死锁的程序时似乎也不太简单(有公司会出这样的面试题),以下是一个简单的死锁例子,程序说明都写着类的注释里了,有点罗嗦,但是应该也还是表述清楚了 ...

  7. C++教程之lambda表达式一

    什么是Lambda? C++ 11增加了一个很重要的特性--Lambda表达式.营里(戴维营)的兄弟都对Objective-C很熟悉,很多人多block情有独钟,将各种回调函数.代理通通都用它来实现. ...

  8. Timer Swing

    一个Swing的例子,按钮控件上中文出现乱码: 试了网上的设置Font,或将汉字使用new  String(str.getBytes(),"GBK")对展示的汉字进行编码.都无效. ...

  9. 十天学Linux内核之第一天---内核探索工具类

    原文:十天学Linux内核之第一天---内核探索工具类 寒假闲下来了,可以尽情的做自己喜欢的事情,专心待在实验室里燥起来了,因为大二的时候接触过Linux,只是关于内核方面确实是不好懂,所以十天的时间 ...

  10. 面向对象三大特征之继承(extends)——Java笔记(六)

    继承:            从一般到特殊的关系,是一种拓展关系,子类对象是父类的一种,也可称为”is a“的关系 泛化:         把子类里的共性抽取到父类里的来的过程 特化:         ...