zoukankan      html  css  js  c++  java
  • Mvc 6 中创建 Web Api

    如何在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 这次的变动真的非常的让人激动。

  • 相关阅读:
    服务部署 RPC vs RESTful
    模拟浏览器之从 Selenium 到splinter
    windows程序设计 vs2012 新建win32项目
    ubuntu python 安装numpy,scipy.pandas.....
    vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
    ubuntu 修改root密码
    python 定义类 简单使用
    python 定义函数 两个文件调用函数
    python 定义函数 调用函数
    python windows 安装gensim
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4207385.html
Copyright © 2011-2022 走看看