微软推出的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 的请求管道,

 public class Startup
{
public void Configure(IApplicationBuilder app)
{
// Nothing here!
}
}

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

 {
"webroot": "wwwroot",
"version": "1.0.0-*",
"exclude": [
"wwwroot"
],
"packExclude": [
"**.kproj",
"**.user",
"**.vspscc"
],
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta1"
},
"frameworks" : {
"aspnet50" : { },
"aspnetcore50" : { }
}
}

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

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

然后再Startup.cs 中添加

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

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

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

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

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

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

先引用 Microsoft.Framework.DependencyInjection,

然后添加如下方法:

  public void ConfigureServices(IServiceCollection services)
{ services.AddMvc();
}

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

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

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

     public class Test
{
public int Id { get; set; }
[Required]
public string Title { get; set; }
}

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

 namespace WebApiDemo.Controllers.Controllers
{
//注意这个写法,web api 的路由 不要忘了前面的api当然你可以随意的命名
[Route("api/[controller]")]
public class HomeController : Controller
{ public static List<Test> list = new List<Test>() {
new Test() { Id=, Title="test1" },
new Test() { Id=, Title="test2" }
}; // GET: api/values
//获得所有数据
[HttpGet]
public IEnumerable<Test> Get()
{
return list;
} //按照id 查找数据 其中HttpGet 中 {id} 是模板 Name是路由的名字在mvc 5中的api 中HttpGet 是没有参数的。
// GET api/values/5
[HttpGet("{id}", Name = "getbyid")]
public IActionResult Get(int id)
{
var item = list.FirstOrDefault(p => p.Id.Equals(id)); if (item == null)
{
return HttpNotFound();
} return new ObjectResult(item); } // POST api/values
//添加数据
[HttpPost]
public void Post([FromBody]Test value)
{
if (!ModelState.IsValid)
{
Context.Response.StatusCode = ;
}
else
{
value.Id = list.Max(p => p.Id) + ;
list.Add(value); string url = Url.RouteUrl("getbyid", new { id = value.Id }); Context.Response.StatusCode = ;
//添加成功之后,跳转看是否添加成功
Context.Response.Headers["Location"] = url;
} } //更新数据
// PUT api/values/5
[HttpPut("{id}")]
public IActionResult Put(int id, [FromBody]Test value)
{
if (!ModelState.IsValid)
{
return new HttpStatusCodeResult();
}
else
{
var item = list.FirstOrDefault(p => p.Id.Equals(id)); if (item == null)
{
return HttpNotFound();
}
else
{ value.Id = item.Id; list.Remove(item);
list.Add(value); return new ObjectResult(value);
} }
} //删除数据
// DELETE api/values/5
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{ var item = list.FirstOrDefault(x => x.Id == id);
if (item == null)
{
return HttpNotFound();
}
list.Remove(item);
return new HttpStatusCodeResult();
}
}
}

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

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

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

 {
"webroot": "wwwroot",
"version": "1.0.0-*",
"exclude": [
"wwwroot"
],
"packExclude": [
"**.kproj",
"**.user",
"**.vspscc"
],
"dependencies": {
"Microsoft.AspNet.Server.IIS": "1.0.0-beta1",
"Microsoft.AspNet.Diagnostics": "1.0.0-beta1",
"Microsoft.AspNet.Mvc": "6.0.0-beta1",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta1"
},
"frameworks": {
"aspnet50": { },
"aspnetcore50": { }
},
"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
} }

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

然后F5运行:

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

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

如何在Mvc 6 中创建 Web Api以及如何脱离IIS实现自我托管的更多相关文章

  1. Mvc 6 中创建 Web Api

    如何在Mvc 6 中创建 Web Api以及如何脱离IIS实现自我托管 微软推出的Asp.net vNext(asp.net 5.0)的其中的一个目标就是统一mvc 和web api 的框架.接下来我 ...

  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. 为什么QQ浏览器不是默认浏览器但是在打开网页的时候还是默认启动?

    因需要浏览器兼容性测试装了一个QQ浏览器,我将火狐设为默认浏览器,但是每次打开连接的时候都是启动QQ浏览器. 出现这样的情况有以下两种可能:1.取消QQ为默认浏览器打开的设置项未成功,若需要取消QQ为 ...

  2. try catch finally 用法

    trycatchfinally 1.将预见可能引发异常的代码包含在try语句块中.2.如果发生了异常,则转入catch的执行.catch有几种写法:catch这将捕获任何发生的异常.catch(Exc ...

  3. 嵌入式开发板iTOP-4412开发板移植CAN模块

    本文转自迅为:http://www.topeetboard.com 首先拷贝迅为提供的 libcanjni.tar.gz 压缩包到 android 源码的“iTop4412_ICS/device/sa ...

  4. [转]SQLServer 2008数据库查看死锁、堵塞的SQL语句

    本文转自:http://www.cnblogs.com/zhuque/archive/2012/11/08/2763343.html 死锁和堵塞一直是性能测试执行中关注的重点. 下面是我整理的监控sq ...

  5. 【Javascript Demo】移动端访问PC端网页时跳转到对应的移动端网页

    不想通过CSS自适应在PC端和移动端分别显示不同的样式,那么只能通过在移动端访问PC端网页时跳转到对应的移动端网页了,那么怎么跳转呢,网上也有很多文章说明,下面是本人测试有效的方式. 1.效果图 PC ...

  6. ckplayer播放器去掉右边的开关灯分享插件

    在上一篇文章中介绍了如何使用ckplayer播放器,但是有的人不需要CK播放器右边的开关灯分享插件,那么就需要把该插件给去掉,方法也很简单. 第一步:先打开ckplayer.js里找到下面三行删除掉 ...

  7. 2014 UESTC 暑前集训队内赛(2) 部分解题报告

    B.Cuckoo for Hashing 模拟题. 代码: #include <iostream> #include <cstdio> #include <cstring ...

  8. RabbitMQ 一二事(3) - 订阅模式(微信公众号模式)的应用

    之前讲的消费者互相可以把队列中的消息全部读取,但是不是读完整的所有信息 那么采用订阅模式就行,这就是微信公众号的模式, 比如10个人订阅了我的公众号"BeJavaGod",当我发送 ...

  9. Auto Clear Unity Console Log

    功能 可以在Editor模式下执行,当然也可以Runtime模式下执行,自动清除 Console的log信息 功能需求 当在制作Editor的一些功能时,常常需要手动的点击Console窗口的Clea ...

  10. Unity-WIKI 之 AllocationStats(内存分配)

    组件功能 allocationstats是一个简单的辅助工具,用于显示您的应用程序分配多少内存.它采用GC.GetTotalMemory来跟踪内存使用 使用方法 添加 Allocmem.cs 到场景中 ...