[轉] Asp.net vNext webapi 自託管

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

            轉載需註明!web

微軟推出的Asp.net vNext(asp.net 5.0)的其中的一個目標就是統一mvc 和web api 的框架。接下來我就演示一下一下幾個內容json

 1,怎麼在Asp.net mvc 6 中建立簡單的web api。api

 2,怎麼在空的項目工程中添加程序須要的組件。瀏覽器

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

 4,怎麼不經過IIS自我託管。app

首先須要安裝Visual Studio 2015 Preview,安裝完以後,打開File >New >Project 而後 Template>C#>Web 新建一個Asp.Net Web Application 我命名爲WebApiDemo:以後要選擇 Asp.net 5 Empty 而後選擇ok 就能夠了 :框架

 

 

項目包括以下幾個文件:asp.net

 

  • global.json 是包括整個solution的設置而且能夠確保項目和項目之間的引用。
  • project.json 是這個工程的配置。
  • Startup.cs 是 startup 和 配置的代碼。

 

在Startup.cs 中配置asp.net 的請求管道,visual-studio

複製代碼
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  

            轉載需註明!

相關文章
相關標籤/搜索