asp网站会员注册不了,wordpress是pass么,服务公司有哪些,做行业导航网站Web Api 是什么#xff1f; MSDN#xff1a;ASP.NET Web API 是一种框架#xff0c;用于轻松构建可以访问多种客户端#xff08;包括浏览器和移动设备#xff09;的 HTTP 服务 百度百科#xff1a;Web API是网络应用程序接口。 个人理解#xff1a;Web API 是提供给多种… Web Api 是什么 MSDNASP.NET Web API 是一种框架用于轻松构建可以访问多种客户端包括浏览器和移动设备的 HTTP 服务 百度百科Web API是网络应用程序接口。 个人理解Web API 是提供给多种客户端对data做CRUD(增删查改)操作的统一接口 ------------------------------------------- Asp.net Web API 支持多种寄宿方式 1IIS作为宿主创建一个Asp.net web应用程序作为Web API 的宿主 2自宿主不需要IIS支持使用任意的应用程序作为宿主【控制台、Windows Forms、WPF甚至Windows Service】 看了Artech大神的一小节Web API记录一下学到的东西 [构建简单的Web API] 1,以Web Host方式寄宿Web API Visual Studio 为我们提供了专门用于创建ASP.NET Web API应用的项目模板我们可以一键式创建一个完整的APS.NET Web API项目。 这里先不使用Visual Studio自动创建的。我们完全在创建的空项目中编写我们的程序。 1.1 构建解决方案 API: 一个空的类库项目表现为HttpController类型的Web API就定义在此项目中Model一个空的类库项目实体类定义在这里WebHost一个空的ASP.NET Web应用程序1.2 定义Web API 在正式定义Web API 之前我们需要在项目Model中定义一个代表联系人的实体类Contact,这里做简单的定义 public class Contact{public string ID { get; set; }public string Name { get; set; }public string PhoneNum { get;set; }}Web API定义在API项目中需要继承ApiController,ApiController定义在程序集“System.Web.Http.dll”, 程序集在“C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Stack 5\Packages\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45”可以找到 在ContactsController中我们定义了Get、Post、Put、Delete这4个Action它们分别实现了针对联系人的查询、添加、修改、删除操作。Action方法Get具有一个表示联系人ID的可缺省参数如果该参数存在则返回对应的联系人否则返回整个联系人列表。由于ASP.NET Web API默认实现了Action方法与HTTP方法的映射所以方法名也体现了它们各自能处理的请求必须采用HTTP方法 public class ContactsController : ApiController{ListContact contacts;public ContactsController(){contacts new ListContact();contacts.Add(new Contact() { ID 001, Name 小白, PhoneNum 13529093839 });contacts.Add(new Contact() { ID 002, Name 大白, PhoneNum 13529093838 });contacts.Add(new Contact() { ID 003, Name 小黑, PhoneNum 13529088838 });}public IEnumerableContact Get(string idnull) {return from c in contacts where c.IDid||string.IsNullOrEmpty(id) select c; }public void Post(Contact item) {contacts.Add(item);}public void Put(Contact item) {contacts.Remove(contacts.First(c c.ID item.ID));contacts.Add(item);}public void Delete(string id) {contacts.Remove(contacts.First(c c.ID id));}}1.3 将WebHost作为Web API的宿主 WebHost在解决方案中是一个空的ASP.NET Web应用程序我们还需要为其添加一些必需的程序集引用。 System.Web.Http;(\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45) System.Web.Http.WebHost;(\Microsoft.AspNet.WebApi.WebHost.5.0.0\lib\net45) System.Net.Http; System.Net.Http.Formatting;(\Microsoft.AspNet.WebApi.Client.5.0.0\lib\net45) 我们需要在WebHost项目中添加一个Global.asax全局配置文件注册一个默认路由路由系统会解析当前请求访问的目标HttpController和Action的名称 protected void Application_Start(object sender, EventArgs e){GlobalConfiguration.Configuration.Routes.MapHttpRoute(name: Default,routeTemplate: api/{controller}/{id},defaults: new { id RouteParameter.Optional });}路由规则中没有表示目标Action的路由参数ASP.NET Web API如何根据请求确定哪个Action方法应该被调用呢其实它能根据请求采用HTTP方法来确定目标Action方法。当然在注册路由模板中提供代表Action名称的路由参数({action})也是支持的。 现在Web API的以WebHost为宿主的工作就完成了我们可以利用浏览器来调用寄宿的Web API来判断寄宿工作是否成功。由于浏览器在默认情况下访问我们在地址栏中输入的地址总是采用HTTP-GET请求所以我们只能利用它来调用支持HTTP-GET的Action方法即定义在ContactsController中的Get方法。 采用Chrome浏览器可以看到我们获取的联系人列表是XML格式的数据表示对于ASP.NET Web API 来说它会优先利用请求报头Accept携带的媒体类型来确定相应内容应用的表现形式。 如下所示是Chrome访问“http://localhost:3697/api/contacts/001”发送请求的内容它之所以会得到以XML表示的响应是因为“Accept”报头指定的媒体类型列表中只有“application/xml”被ASP.NET Web API支持。如果我们使用IE请求的“Accept”报头将携带不同的媒体类型列表我们实际上会得到以JSON格式表示的响应结果 Accept:text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q0.8
Cache-Control:max-age0
Host:localhost:3697
Proxy-Connection:keep-alive
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36我们利用Fiddler来发送调用Web API的HTTP请求获取以JSON格式表示的响应结果。 如图利用Fiddler发送了一个针对目标地址http://localhost:3697/api/contacts/001的Http-GET请求并添加了一个值为application/json的“Accept”报头Execute发送请求之后确实得到了Json格式表示的联系人列表 使IIS支持Put和Delete请求 在定义ContactsController的时候我们分别采用Get、Post、Put、Delete作为获取、创建、修改和删除联系人的操作所支持的HTTP方法。但是IIS默认是不支持Put和Delete请求的 IIS拒绝PUT和DELETE请求是由默认注册的一个名为WebDAVModule的自定义HttpModule导致的。解决这个问题最为直接的方式就是将注册的HttpModule移除 system.webServermodules runAllManagedModulesForAllRequeststrueremove nameWebDAVModule//modules
/system.webServer2,自宿主的方式寄宿Web API 我们在原来的解决方案中添加一个空的控制台应用程序SelfHost作为宿主 跟WebHost一样引用解决方案中的API.dll,同样需要应用一些必需的程序集(红色为与WebHost不同的) System.Web.Http;(\Microsoft.AspNet.WebApi.Core.5.0.0\lib\net45) System.Web.Http.SelfHost;(\Microsoft.AspNet.WebApi.SelfHost.5.0.0\lib\net45) System.Net.Http; System.Net.Http.Formatting;(\Microsoft.AspNet.WebApi.Client.5.0.0\lib\net45)通过前面的WebHost,我们知道接下来需要做的是注册路由了。在此之前我们还需要动态加载解决方案中的程序集API.dll 下面是Artech大神在 【在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用 】中写的 有个错误的地方httpServer.OpenAsync()后没有执行Wait()方法导致计算机并未分配一个端口给程序这让我折腾了好久不过也学到了其他知识比如[如何查看计算机某个端口被谁占用] static void Main(string[] args){ Assembly.Load(API,Version1.0.0.0,Cultureneutral,PublicKeyTokennull);HttpSelfHostConfiguration configuration new HttpSelfHostConfiguration(http://127.0.0.1:7304);using (HttpSelfHostServer httpServer new HttpSelfHostServer(configuration)){httpServer.Configuration.Routes.MapHttpRoute(name: DefaultApi,routeTemplate: api/{controller}/{id},defaults: new { id RouteParameter.Optional });httpServer.OpenAsync();//纠正httpServer.OpenAsync().Wait();Console.Read();}}当我们没有执行Wait()方法时查看一下计算机是否有分配端口 1首先调出命令窗口开始----运行----cmd或者是windowR组合键 2输入命令netstat -ano可以看到所有端口的情况。发现找了几百遍也是找不到7304端口的 如果你加了Wait(),运行后出现 “HTTP 无法注册 URL http://:****/。进程不具有此命名空间的访问权限(有关详细信息请参见 http://go.microsoft.com/fwlink/?LinkId70353)” 你只要以管理员的身份打开Visual Studio就可以了 转载于:https://www.cnblogs.com/Sunlimi/p/webapi-start.html