返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .ne
来源:互联网 发布:vb程序设计免费版下载 编辑:程序博客网 时间:2024/04/28 02:52
索引页]
[源码下载]
返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作
作者:webabcd
介绍
asp.net mvc 之 asp.net mvc 4.0 新特性之 Web API
- 自宿主 web api
- 宿主到 iis,通过 WebForm 提供 web api 服务
- 通过 Web API 上传文件
- .net 4.5 带来的更方便的异步操作
示例
1、自宿主 Web API 的 demo
WebApiSelfHost/Program.cs
/* * 自宿主 web api 的 demo * * 测试地址:http://localhost:123/api/hello */using System;using System.Collections.Generic;using System.Linq;using System.Net.Http;using System.Text;using System.Web.Http;using System.Web.Http.SelfHost;namespace WebApiSelfHost{ // web api public class HelloController : ApiController { public string Get() { return "hello: webabcd"; } } class Program { static readonly Uri _baseAddress = new Uri("http://localhost:123/"); static void Main(string[] args) { HttpSelfHostServer server = null; try { // 配置一个自宿主 http 服务 HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(_baseAddress); // 配置 http 服务的路由 config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // 创建 http 服务 server = new HttpSelfHostServer(config); // 开始监听 server.OpenAsync().Wait(); // 停止监听 // server.CloseAsync().Wait(); Console.WriteLine("Listening on " + _baseAddress); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); Console.ReadLine(); } } }}
2、演示如何在 WebForm 中提供 web api 服务
Global.asax.cs
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Routing;using System.Web.Security;using System.Web.SessionState;using System.Web.Http;namespace WebApiWebFormHost{ public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { // 配置路由 RouteTable.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } }}
HelloController.cs
/* * 宿主到 iis,通过 WebForm 提供 web api 服务 * * 测试地址:http://localhost:4723/api/hello */using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Net;using System.Net.Http;using System.Web.Http;namespace WebApiWebFormHost{ public class HelloController : ApiController { public IEnumerable<string> Get() { string[] names = { "webabcd", "webabcd2", "webabcd3" }; return names; } }}
3、演示如何通过 web api 上传文件
WebApiWebFormHost/UploadFileController.cs
/* * 通过 web api 上传文件 */using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Threading.Tasks;using System.Web.Http;namespace MVC40.Controllers{ public class UploadFileController : ApiController { public async Task<string> Post() { // 检查是否是 multipart/form-data if (!Request.Content.IsMimeMultipartContent("form-data")) throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); // 设置上传目录 var provider = new MultipartFormDataStreamProvider(@"c:\\temp"); // 接收数据,并保存文件 var bodyparts = await Request.Content.ReadAsMultipartAsync(provider); string result = ""; // 获取表单数据 result += "formData txtName: " + bodyparts.FormData["txtName"]; result += "<br />"; // 获取文件数据 result += "fileData headers: " + bodyparts.FileData[0].Headers; // 上传文件相关的头信息 result += "<br />"; result += "fileData localFileName: " + bodyparts.FileData[0].LocalFileName; // 文件在服务端的保存地址,需要的话自行 rename 或 move return result; } }}
WebApiWebFormHost/UploadDemo.cshtml
@{ Layout = null;}<!DOCTYPE html><html><head> <title>调用 web api 上传文件的 demo</title></head><body> @using (Html.BeginForm("UploadFile", "api", FormMethod.Post, new { enctype = "multipart/form-data" })) { <input type="text" id="txtName" name="txtName" value="webabcd" /> <div>please select a file</div> <input name="data" type="file" multiple /> <input type="submit" /> }</body></html>
4、.net 4.5 带来的更方便的异步操作
AsyncController.cs
/* * 演示如何利用 .net 4.5 的新特性实现异步操作 * * 什么场景下需要异步操作? * 在因为磁盘io或网络io而导致的任务执行时间长的时候应该使用异步操作,如果任务执行时间长是因为cpu的消耗则应使用同步操作(此时异步操作不会改善任何问题) * 原理是什么? * 在 Web 服务器上,.NET Framework 维护一个用于服务 ASP.NET 请求的线程池(以下把 .NET Framework 维护的用于服务 ASP.NET 请求的线程池称作为“特定线程池”) * 同步操作时,如果特定线程池利用满了,则不会再提供服务 * 异步操作时: * 1、一个请求过来,特定线程池出一个线程处理此请求 * 2、启动一个非特定线程池中的另一个线程处理异步操作,此时处理此请求的线程就会空出来,不会被阻塞,它可以继续处理其它请求 * 3、异步操作执行完毕后,从特定线程池中随便找一个空闲线程返回请求结果 */using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Threading.Tasks;using System.Web.Http;namespace MVC40.Controllers{ public class AsyncController : ApiController { public async Task<string> Get() { return await GetData(); } [NonAction] public async Task<string> GetData() { await Task.Delay(10 * 1000); return "长时间的任务执行完毕"; } }}
0 0
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .ne
- Asp.Net中WebForm与MVC,Web API模式对比
- 在ASP.NET Core MVC中构建简单 Web Api
- ASP.NET MVC 提供与访问 Web Api
- ASP.NET Web API :Web宿主
- 第11章 ASP.NET Web API(WCF宿主+Web API、OWIN宿主+Web API)
- 实战 ASP.NET MVC Web API
- ASP.NET MVC 4 (十二) Web API
- 使用OWIN 构建自宿主ASP.NET Web API 2
- ASP.NET Web API: 宿主(Hosting)
- [ASP.NET MVC 小牛之路]18 - Web API
- [ASP.NET MVC 小牛之路]18 - Web API
- [ASP.NET MVC 小牛之路]18 - Web API
- ASP.NET Core MVC中构建Web API
- Asp.net MVC 与 Asp.net Web API 区别
- ASP.NET MVC与ASP.NET Web API的区别
- ASP.NET MVC与ASP.NET Web API的区别
- ASP.NET Web API Selfhost宿主环境中管道、路由
- MYsql 语句
- Remove Duplicates from Sorted Array II 允许重复2次数组
- jdk6 webservice根据客户端代码编写和调试服务器端代码心得
- Editor类的多选枚举
- ODBC_DAO_OLE DB_ADO
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .ne
- 机器学习
- 【Java二十周年】浅谈我和Java的故事
- 第六周项目1-我的数组类
- linux shell 数组建立及使用技巧
- 【计科13】非多态版通讯录管理程序示例代码
- [Rx86OS-VIII] 接收鼠标数据
- linux jar 命令解war包,打war包
- localsocket连接通道数递增出错的问题