[转] Asp.net vNext webapi 自托管

【声明】本文转自:http://www.cnblogs.com/ListenCode/p/4206204.html

转载需注明!

微软推出的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 这次的变动真的非常的让人激动。

【声明】本文转自:http://www.cnblogs.com/ListenCode/p/4206204.html

转载需注明!

时间: 2024-11-04 11:42:55

[转] Asp.net vNext webapi 自托管的相关文章

微软讲座视频: 下一代vNext平台:ASP.NET vNext与MVC6,WebAPI 3.0 新特性 下载

 微软下一代平台vNext: .NET 5.0.ASP.NET vNext与MVC6,WebAPI 3.0 新特性 录像视频下载 http://t.cn/RPYhcuG  微软与开源实战训练营QQ群 203822816 微软MSDN俱乐部QQ群 29754721, 微软MSDN特邀讲师:徐雷  Frank Xu Lei倾力打造!新浪微博:http://weibo.com/frankxulei  @@老徐FrankXuLei 系统讲解NET vNext 新特性ASP.NET vNext新特性,

微软讲座视频: 微软下一代vNext平台:ASP.NET vNext与MVC6,WebAPI 3.0 新特性

微软下一代平台vNext: .NET 5.0.ASP.NET vNext与MVC6,WebAPI 3.0 新特性 录像视频下载 http://t.cn/RPYhcuG  微软与开源实战训练营QQ群 203822816 微软MSDN俱乐部QQ群 29754721, 微软MSDN特邀讲师:徐雷  Frank Xu Lei倾力打造!新浪微博:http://weibo.com/frankxulei  @@老徐FrankXuLei 讲课系统NET vNext 新特性ASP.NET vNext新特性, MV

微软下一代云环境Web开发框架ASP.NET vNext预览

微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软"云优先"(cloud-first)的新战略思想.微软员工Scott Hanselman发布博客对ASP.NET vNext进行了简要介绍.以下为其博客的翻译. 原文:http://www.hanselman.com/blog/IntroducingASPNETVNext.aspx 译文发布地址:http

兼容Mono的下一代云环境Web开发框架ASP.NET vNext

微软在2014年5月12日的TechEd大会上宣布将会发布下一代ASP.NET框架ASP.NET vNext的预览.此次发布的ASP.NET框架与以前相比发生了根本性的变化,凸显了微软“云优先”(cloud-first)的新战略思想.Scott Hanselman发布博客对ASP.NET vNext进行了简要介绍.而且ASP.NET入驻Github 下一代ASP.NET将全部开源,写下本文记录下这个时刻. 微软在今年的Build大会上成立.NET开源基金会和以下这些产品的发布: .NET Nat

[译]Introducing ASP.NET vNext and MVC 6

原文:http://www.infoq.com/news/2014/05/ASP.NET-vNext?utm_source=tuicool Part of the ASP.NET vNext initiative, ASP.NET MVC 6 represents a fundamental change to how Microsoft constructs and deploys web frameworks. The goal is to create a host agnostic fr

ASP.NET vNext总结:Bower

1.前言 如果VS自称IDE界第二,其它IDE不敢称第一了.牛得不得了,它有任性的资本.VS2015又有哪些突破呢?目前正式版并没有发布,但大的方向和思想基本上已经确定了.比如集成开发谷歌Android和苹果IOS等,这里就不讨论这些了.如题,我们来了解一下Bower(属于NPM技术)在ASP.NET vNext中使用. 2.概述 说到Bower不得不提NPM.如果你想深入了解NPM技术,请登录:https://www.npmjs.com ,我可不敢班门弄斧了. Bower:web包配置管理工具

下一代的 .NET - ASP.NET vNext

在今天举行的微软北美技术大会(TechEd North America)上,我们对外宣布了一些将会应用到下一代.NET上的技术创新点.这其中最重要的就是ASP.NET vNext——针对云开发环境优化过的ASP.NET.我们一直在对.NET的一些核心技术进行优化,尤其是在上个月举行的Build大会上发布的 .NET Native 预编译器和 .NET Next Generation JIT (“RyuJIT”).都有新的发布版本供你试用.我们还有一些小的宣布要与大家分享. 在上个月的Build大

ASP.NET vNext 概述

兼容Mono的下一代云环境Web开发框架ASP.NET vNext 我们知道了ASP.NET vNext是一个全新的框架,是一个与时俱进的框架.这篇文章将深入讨论在整体架构更多的细节,内容主要参照文章 http://davidfowl.com/asp-net-vnext-architecture/. github库之间的依赖关系可以看下面这个图 : 这个图不是所有的依赖关系,从这里可以看出ASP.NET vNext的一个架构: KRuntime - 包括SDK和运行时 (kvm, kpm和kre

一步一步学习ASP.NET vNext (一)- 基本概念和环境配置

转发:微软MVP 卢建晖 的文章,希望对大家有帮助. 编者语:时代在变,在csdn开博一年就发了那么的两篇文章,无论是什么原因都觉得有愧了.但是今年重心都会在这里发表一些文章,和大家谈谈.NET, 移动跨平台,云计算等热门话题.希望有更好的交流. 好吧言归正转,开篇和大家先聊一个系列ASP.NET vNext . 相信大家都知道了微软在2014年中开始正式对不同的技术进行了开源.而.NET开源对于微软商业上和技术上都有不同程度的影响.说句实在的,mono社区这么多年终于有了个名份了.这里特别谢谢