如何在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 這次的變動真的非常的讓人激動。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM