ASP.NET Web API 开篇示例介绍【彩民之家高手论坛】

2019-10-13 04:31 来源:未知

文件地点:

D:体系路径.target项目名.BLL.pdb”。
已产生生成项目“D:品种路径项目名.BLL类外号.BLL.csproj”(暗中同意目的)的操作。
ResolveAssemblyReferences:
主引用“System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL”。
C:WindowsMicrosoft.NETFrameworkv4.0.30319Microsoft.Common.targets(1605,5): warning MSB3245: 未能深入分析此援引。未能找到程序集“System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL”。请检查磁盘上是或不是存在该程序集。 若是你的代码须求此援引,则恐怕出现编写翻译错误。 [D:种类路径项目名.Web项目名.Web.csproj]
用于 SearchPath“{HintPathFromItem}”。
已思索使用“..packagesMicrosoft.AspNet.WebApi.WebHost.5.2.3libnet45System.Web.Http.WebHost.dll”,但它子虚乌有。
用于 SearchPath“{TargetFrameworkDirectory}”。
已思索使用“C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5System.Web.Http.WebHost.winmd”,但它不设有。
已思念接纳“C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5System.Web.Http.WebHost.dll”,但它不设有。
已思索选拔“C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5System.Web.Http.WebHost.exe”,但它不设有。
已思虑采取“C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5FacadesSystem.Web.Http.WebHost.winmd”,但它不设有。
已思考采取“C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5FacadesSystem.Web.Http.WebHost.dll”,但它荒诞不经。
已怀念动用“C:Program Files (x86)Reference AssembliesMicrosoftFramework.NETFrameworkv4.5FacadesSystem.Web.Http.WebHost.exe”,但它不真实。
用于 SearchPath“{Registry:SoftwareMicrosoft.NETFramework,v4.5,AssemblyFoldersEx}”。
已考虑 AssemblyFoldersEx 位置。
用于 SearchPath“{AssemblyFolders}”。
已思索动用“C:Program Files (x86)Reference AssembliesMicrosoftFrameworkv3.0System.Web.Http.WebHost.winmd”,但它海市蜃楼。
已牵记动用“C:Program Files (x86)Reference AssembliesMicrosoftFrameworkv3.0System.Web.Http.WebHost.dll”,但它不设有。
已思量选取“C:Program Files (x86)Reference AssembliesMicrosoftFrameworkv3.0System.Web.Http.WebHost.exe”,但它不设有。
已思索采用“C:Program Files (x86)Microsoft SQL Server110SDKAssembliesSystem.Web.Http.WebHost.winmd”,但它不设有。
已考虑选取“C:Program Files (x86)Microsoft SQL Server110SDKAssembliesSystem.Web.Http.WebHost.dll”,但它不设有。
已思量选拔“C:Program Files (x86)Microsoft SQL Server110SDKAssembliesSystem.Web.Http.WebHost.exe”,但它空头支票。
已考虑使用“C:Program FilesIISMicrosoft Web Deploy V3System.Web.Http.WebHost.winmd”,但它空头支票。
已考虑使用“C:Program FilesIISMicrosoft Web Deploy V3System.Web.Http.WebHost.dll”,但它空中楼阁。
已考虑使用“C:Program FilesIISMicrosoft Web Deploy V3System.Web.Http.WebHost.exe”,但它不设有。
已思索采取“C:Program Files (x86)Reference AssembliesMicrosoftFrameworkv3.5System.Web.Http.WebHost.winmd”,但它不设有。
已思量采取“C:Program Files (x86)Reference AssembliesMicrosoftFrameworkv3.5System.Web.Http.WebHost.dll”,但它不设有。
已记挂选拔“C:Program Files (x86)Reference AssembliesMicrosoftFrameworkv3.5System.Web.Http.WebHost.exe”,但它官样文章。
已思索动用“C:Program Files (x86)Microsoft.NETADOMD.NET110System.Web.Http.WebHost.winmd”,但它一纸空文。
已思虑动用“C:Program Files (x86)Microsoft.NETADOMD.NET110System.Web.Http.WebHost.dll”,但它荒诞不经。
已思量动用“C:Program Files (x86)Microsoft.NETADOMD.NET110System.Web.Http.WebHost.exe”,但它不设有。
用于 SearchPath“{GAC}”。
已思量使用“System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL”,但未在 GAC 中找到它。
用于 SearchPath“{RawFileName}”。
已思考将“System.Web.Http.WebHost, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL”视为文件名,但它不设有。
用于 SearchPath“D:花色路径.target”。
已考虑接纳“D:类型路径.targetSystem.Web.Http.WebHost.winmd”,但它子虚乌有。
已思量选用“D:类型路径.targetSystem.Web.Http.WebHost.dll”,但它不真实。
已思索动用“D:类型路径.targetSystem.Web.Http.WebHost.exe”,但它空中楼阁。

ASP.NET Web API演示示例

遭逢基础配置

首先大家新建一个类库项目命名字为Common,况且定义个商品消息类别,示例代码如下:

代码1-1

namespace Common{    public class Product    {        public string ProductID { get; set; }        public string ProductName { get; set; }        public string ProductCategory { get; set; }    }}

创设WebHost宿主情形

接下来大家跟着创制三个空的ASP.NET WEB应用程序命名称叫WebHost,这里说雅培(Beingmate)下ASP.NET Web API框架只是个单身框架,它并无法独立运转,所以它须求宿主情形,刚刚我们新建的WEB应用程序则会在底下的身先士卒中偶尔的承载着ASP.NET Web API框架来运维。

引用程序集

Newtonsoft.Json.dll 路径: C:Program FilesMicrosoft ASP.NETASP.NET MVC 4PackagesNewtonsoft.Json.4.5.6libnet40Newtonsoft.Json.dll

System.Net.Http.dll 路径:C:Program FilesMicrosoft ASP.NETASP.NET MVC 4Assemblies System.Net.Http.dll

System.Net.Http.Formatting.dll路径:C:Program FilesMicrosoft ASP.NETASP.NET MVC 4Assemblies System.Net.Http.Formatting.dll

System.Web.Http.dll 路径:C:Program FilesMicrosoft ASP.NETASP.NET MVC 4Assemblies System.Web.Http.dll

System.Web.Http.WebHost.dll路径:C:Program FilesMicrosoft ASP.NETASP.NET MVC 4AssembliesSystem.Web.Http.WebHost.dll

Common.dll

可能采取这种引用格局:

彩民之家高手论坛 1

(如若上文中所述的目录地点未有Newtonsoft.Json.dll的话能够文件寻找一下,然后手动引用。)

继之大家再构建贰个Web应用程序管理类Globl.asax ,并在其Application_Start()方法中注册路由,示例代码如下:

代码1-2

using System.Web.Http;namespace WebHost{    public class Global : System.Web.HttpApplication    {        protected void Application_Start(object sender, EventArgs e)        {            GlobalConfiguration.Configuration.Routes.MapHttpRoute(              "DefaultAPI", "api/{controller}/{id}", new { controller="product",id = RouteParameter.Optional });        }    }}

路由注册好明白后,大家还得新建个Web API调整器,命名称为ProductController,示例代码如下:

代码1-3

using System.Web.Http;using Common;namespace WebHost.Controllers{    public class ProductController:ApiController    {        private static List<Product> products;        static ProductController()        {            products = new List<Product>();            products.AddRange(                new Product[]                 {                    new Product(){ ProductID="001", ProductName="牙刷",ProductCategory="洗漱用品"},                    new Product(){ ProductID="002", ProductName="《.NET框架设计—大型企业级应用框架设计艺术》", ProductCategory="书籍"}                });        }        public IEnumerable<Product> Get(string id = null)        {            return from product in products where product.ProductID == id || string.IsNullOrEmpty select product;        }    }}

在代码1-3中大家看来ProductController调节器承袭自ApiController,这里的章程自身的猜度应该是跟ASP.NET MVC框架对调节器的拍卖同样,在央求到来之后同一时候通过路由拍卖以往,Web API框架会把当前项目中享有引用的程序集全部寻觅一下况兼搜出承接自ApiController的类型,而且缓存在三个xml文件,不知道估计的对不对在后头的篇幅我们再来验证,这里提一下。

周详的意中人的或然发掘在路由注册的时候并未相应的Action的路由参数,其实这里正是Web API框架的两个区别之处,它是根据Http诉求方法来鲜明Action的法门的,然则浏览器暗中同意的乞求方法正是Http-get,所以大家以此时候能够直接运转品种。

图2

彩民之家高手论坛 2

建立SelfHost

上面大家来看一下在SelfHost宿主碰到中ASP.NET Web API框架的行使示例。

率先大家新建叁个调整台应用程序命名为SelfHost,SelfHost意况项目标顺序集引用和方面所说的WebHost项目援引唯一区别的正是把System.Web.Http.WebHost.dll程序集换来System.Web.Http.SelfHost.dll程序集,援引路线不改变,也能够采取援用里的扩张栏来加多。

上面就让大家看一下在SelfHost中咱们要求做怎么着事,首先大家必要注册路由那是历次最初做的工作,示例代码如下:

代码1-4

using System.Web.Http;using System.Web.Http.SelfHost;namespace SelfHost{    class Program    {        static void Main(string[] args)        {            HttpSelfHostConfiguration selfHostConfiguration =                new HttpSelfHostConfiguration("http://localhost/selfhost");            using (HttpSelfHostServer selfHostServer = new HttpSelfHostServer(selfHostConfiguration))            {                selfHostServer.Configuration.Routes.MapHttpRoute(                    "DefaultApi", "api/{controller}/{id}", new { id=RouteParameter.Optional});                selfHostServer.OpenAsync();                Console.WriteLine("服务器端服务监听已开启");                Console.Read();            }        }    }}

那边就大致的印证一下,在1-4代码中HttpSelfHostConfiguration对象示例中安装了营地址,对于HttpSelfHostConfiguration类型它是三番两次自HttpConfiguration类型,HttpConfiguration类型是比较根本的三个项目,WebAPI框架中大部的计划新闻都在这里类型实例中举办设置。在三回九转的篇幅中会有谈到。

HttpSelfHostServer对象正是在SelfHost宿主景况中承担着很入眼的剧中人物,它担当管理央浼等一文山会海操作(因为它是WebAPI框架在SelfHost情形中的管道模型的“龙头”),在那只要稍作领会就行了,会在后面包车型大巴管道篇幅揭发它的机要面纱。

接轨向下看大家会看见HttpSelfHostServer对象实例中的Configuration属性里的Routes属性提供了对路由的登记,那有些剧情会在背后的路由篇幅讲明。

再然后正是我们看到的,张开服务监听,等待管理乞求。(这里的监听/管理诉求,并非对真正的乞请进行管理,而是对已经呼吁被卷入好了的对象进行管理,管道篇幅中等教育授)

在路由注册之后大家要新建个Web API调控器,就不啻上边WebHost部分剧情一模二样,拷贝一份过来,然而大家这里要对调整器的代码稍作修改,示例代码如下:

代码1-5

using System.Web.Http;using Common;namespace SelfHost.Controllers{    public class ProductController:ApiController    {        private static List<Product> products;        static ProductController()        {            products = new List<Product>();            products.AddRange(                new Product[]                 {                    new Product(){ ProductID="001", ProductName="牙刷",ProductCategory="洗漱用品"},                    new Product(){ ProductID="002", ProductName="《.NET框架设计—大型企业级应用框架设计艺术》", ProductCategory="书籍"}                });        }        public IEnumerable<Product> Get(string id = null)        {            return from product in products where product.ProductID == id || string.IsNullOrEmpty select product;        }        public void Delete(string id)        {            products.Remove(products.First(product => product.ProductID == id));        }        public void Post(Product product)        {            products.Add;        }        public void Put(Product product)        {            Delete(product.ProductID);            Post;        }    }}

对此在代码1-5中调节器新增添的多少个Action方法,也是分别对应着Http央浼方法。这样也正是能兑现增加和删除改查的功底效能了。那大家还亟需多少个对它实行拜望的客户端。

建立Clinet

作者们再建三个调节台应用程序命名叫Clinet,并且增进如下程序集引用:

Newtonsoft.Json.dll 路径: C:Program FilesMicrosoft ASP.NETASP.NET MVC 4PackagesNewtonsoft.Json.4.5.6libnet40Newtonsoft.Json.dll

System.Net.Http.dll 路径:C:Program FilesMicrosoft ASP.NETASP.NET MVC 4Assemblies System.Net.Http.dll

System.Net.Http.Formatting.dll路径:C:Program FilesMicrosoft ASP.NETASP.NET MVC 4Assemblies System.Net.Http.Formatting.dll

Common.dll

下边大家看一下在Client项目中对SelfHost景况中的财富拓宽访问的示范,示例代码如下:

代码1-6

using Common;using System.Net.Http;namespace Client{    class Program    {        static void Main(string[] args)        {            AsyncProcess();            Console.Read();        }        private async static void AsyncProcess()        {            HttpClient httpClient = new HttpClient();            //获取货品信息列表            HttpResponseMessage responseMessage =                await httpClient.GetAsync("http://localhost/selfhost/api/product");            IEnumerable<Product> products = await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>();            OutputProductInfo;            //添加货品            Product product = new Product()            {                ProductID = "003",                ProductName = "《ASP.NET Web API 2 框架揭秘》",                ProductCategory = "食品类"            };            await httpClient.PostAsJsonAsync<Product>("http://localhost/selfhost/api/product", product);            responseMessage = await httpClient.GetAsync("http://localhost/selfhost/api/product");            products = await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>();            OutputProductInfo;            //修改指定货品信息            responseMessage = await httpClient.GetAsync("http://localhost/selfhost/api/product/003");            product = (await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>.First();            product.ProductCategory = "书籍";            await httpClient.PutAsJsonAsync<Product>("http://localhost/selfhost/api/product", product);            responseMessage = await httpClient.GetAsync("http://localhost/selfhost/api/product");            products = await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>();            OutputProductInfo;            //删除指定货品            await httpClient.DeleteAsync("http://localhost/selfhost/api/product/001");            responseMessage = await httpClient.GetAsync("http://localhost/selfhost/api/product");            products = await responseMessage.Content.ReadAsAsync<IEnumerable<Product>>();            OutputProductInfo;        }        private static void OutputProductInfo(IEnumerable<Product> products)        {            foreach (Product product in products)            {                Console.WriteLine(                    "ProductID:{0},ProductName:{1},ProductCategorm:{2}",                    product.ProductID, product.ProductName, product.ProductCategory);            }            Console.WriteLine("—————————————————————————");        }    }}

对于代码1-第55中学出现许多的门类会在背后的篇幅中逐条的助教,这里就不做演讲了,而是看一下我们最终的演示结果:

先是大家要运维SelfHost项目,等待分界面和如下图3时,再行Client项目对SelfHost中的财富进行寻访。结果如图4

图3

彩民之家高手论坛 3

图4

彩民之家高手论坛 4

参照他事他说加以考察资料:

不怕模仿蒋大书籍中的示例简化了一下做了好几调节,因为后边的字数中有用到那一个示例。

此间戏弄一下胚胎我国对于Web API的书籍资料差不离从未,当然国外的有是有,但是都以色列德国语版的。对于毫无保加马拉加语基础的小编分外是判了死刑,唯一的生活正是用翻译工具一小点的去看。

彩民之家高手论坛 5

万幸蒋大的新作出来了,不然想学Web API还真是无路可走。已看完前三章,收获颇多知识点很全面,在末端小编学习到部分都会写出来跟我们享受。

彩民之家高手论坛 6

出处:

正文版权归作者和新浪共有,招待转发,但未经笔者同意必得保留此段注解,且在篇章页面

难题原因:缺乏配置文件(System.Net.Http.Formatting.dll,System.Web.Http.dll, System.Web.Http.WebHost.dll)

ASP.NET Web API 开篇示例介绍

先是次宣布MVC项目,展开网址

ASP.NET Web API

对于笔者那一个初读书人的话ASP.NET Web API那一个框架很生分又纯熟着。

不谙的是ASP.NET Web API是壹个斩新的框架,对于这些框架在贰个连串中起到的效能作者一时还不是很清楚这里也就不妄下定论了,说真的不是本身不想而是自个儿不能够,只可以和睦去找寻试着去探听它。

熟稔的是ASP.NET Web API跟ASP.NET MVC的架构一起先看起来有一部分貌似的地方。

话就十分少说了,大家就和本人二只来上学ASP.NET Web API那个全新的框架吧。

相对不可能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, ”或它的某一个依赖项。系统找不到钦定的文件。

解决措施:在bin文件上边步向这几个dll文件

TAG标签: 示例 Net 开篇
版权声明:本文由彩民之家高手论坛发布于前端知识,转载请注明出处:ASP.NET Web API 开篇示例介绍【彩民之家高手论坛】