近工作中会用到WebAPI、AngularJS2、Silverlight等,需要暂停其他的,赶快充电了…
先从Web API着手。
一 概述
a) API(ApplicationProgramming Interface)应用程序编程接口是指一些预先定义的函数,可供应用程序与开发人员访问,而无需了解源码或内部工作机制的细节。Web API则是一种可以使用HTTP协议访问的API。但这里的Web API特指ASP.NETWeb API,另外还有一些基于其它语言或技术的实现。
b) Asp.NetWeb API是一个可扩展的框架,用于构建基于HTTP的服务,这种服务可以在不同平台上的不同应用程序中访问:例如web应用、窗体应用、移动应用等等。它和ASP.NET MVC有相同的工作方式,但Web Api应用程序接收到请求后返回数据,而不是像MVC返回html视图。它就像一个webservice或WCF服务,但例外在于它只支持HTTP协议。
二 新建Web API项目
a) 创建带MVC的Web API项目
创建的项目会在默认MVC项目的基础上增加两个Web API需要的特殊文件,WebApiConfig.cs和ValuesController.cs,前者用于对Web API的配置,后者是一个示例的Web API 控制器。
b) 创建独立的Web API项目
使用空模板创建Web项目后,手动添加Web API相关的文件。首先需要从Nuget安装Web API包,然后创建Configuration文件夹并添加Config.cs文件。
然后通过GlobalConfiguration.Configure(WebAPIConfig.Register)注册。
最后创建与MVC一致的Controllers文件夹和Controller层级,与MVC不同的是,这里的Controller继承自ApiController。最后根据路由规则,请求***/api/ControllerNama/ActionName就可以。
学习资料:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
ASP.NET Web API 是一种框架,用于轻松构建可以访问多种客户端(包括浏览器和移动设备)的 HTTP 服务。 ASP.NET Web API 是一种用于在 .NET Framework 上构建 RESTful 应用程序的理想平台。
REST是英文representational state transfer(表象性状态转变)或者表述性状态转移; Rest是web服务的一种架构风格; 使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议; 轻量级,跨平台,跨语言的架构设计; 它是一种设计风格,不是一种标准,是一种思想。
事务为对象,资源有统一,形式有多样(xml、json等) 每个资源都有一个唯一的资源标识符。 同一个资源具有多种表现形式(xml,json等)。 对资源的各种操作不会改变资源标识符。 所有的操作都是无状态的。 符合REST原则的架构方式即可称为RESTful。
####2.2 为什么会出现restful?
在Restful之前我们写一个web请求,格式通常是这样的:
Restful用法:
restful风格其实就是根据请求的类型(get、post、put、delete)来匹配对应的方法。
在实际开发中,http请求的方法可能是相同的(比如都是post请求),而且请求的参数也相同。这个问题就麻烦。因为遵照Restful风格无法解决。大家可能想到自定义一个路由,比如增加action,可以,但是在webAPI里面是不提倡的。
首先,我们启动特性路由。 就可以使用特性路由。
【1】 无参数的POSt请求
和Get方式请求相同。只不过在客户端$.get和$.post区别。同时只需要添加[httpPost]标记特性即可。
【2】 一个参数的POST请求
和Get方式不一样,动作方法参数上面必须添加[FromBody]标记,否则访问不到!同时WebAPI请求传递的参数,也有特定的格式。而这种格式并不是我们常见的key-value格式。WebAPI模型绑定器寻找的时候,并是按照key去查找。而且空字符串。
何在VS中创建基于.NET的后端应用程序,该应用程序使用C#语言从Web API中提取。让我们开始吧!
为服务器后端逻辑选择语言的问题是几乎每个开发人员最重要的问题之一,特别是对于初学者。目前已经有很多不同的语言:Java,.NET(C#,VD),Ruby,Python,Perl,JavaScript(Node.js),Go,C ++。
除了这些语言的语法特征外,还有许多其他问题/问题,例如扩展的可能性,不同类型数据库的使用,高学习曲线,容错要求,大量数据等等。上。
哪种语言最受欢迎?你应该使用哪一个?也许有人会推荐PHP,它具有丰富的功能和较低的学习曲线。然而,事实仍然是现在最常用的语言是Java和.NET。
本教程介绍如何使用C#(ASP.NET)构建自己的Web服务器(Web API)。重要的是要注意,要托管您的服务器,您将需要基于Windows的托管。
先决条件
我想我们可以开始了。首先,当我们使用C#时,您需要使用Microsoft Visual Studio(您可以在Microsoft官方网站上获取它)。
此外,您还需要启用IIS(Internet信息服务)。在Windows中启用它很容易:
打开Microsoft Visual Studio并创建一个新项目(文件 - >新建 - >项目)。选择“已安装”模板,选择“Visual C#”,然后选择“Web”。在可用模板列表中,选择“ASP.NET Web应用程序(.NET Framework)”。给你的项目命名(对于我的演示,我把“webapi”),然后单击OK。
在下一个模态对话框中,您可以选择任何合适的模板。让我们选择Web API,这样它就会为项目准备所有基本的初始文件。单击确定。
完成。现在,您可以在解决方案资源管理器中浏览生成的文件夹和文件 有应用程序配置,帮助页面数据,一些控制器,字体,CSS和JS文件。
默认情况下,服务器使用位于App_Start / WebApiConfig.cs中的路由表。
注意routeTemplate: "api/{controller}/{id}",它解释了API路由。
现在,让我们做一个基本的例子。在本教程中,我们将为用户准备一个API,这是每个系统的一个非常通用的实体/对象。
该模型代表用户,因此我们将包括各种字段,如ID,姓名,电子邮件,电话和角色。
在Solution Explorer中,右键单击Models文件夹,选择Add,然后选择Class。然后提供一个类名:User。模型类已准备就绪。
现在我们只添加我们决定添加的所有字段:
public class User
{
public int id { get; set; }
public string name { get; set; }
public string email { get; set; }
public string phone { get; set; }
public int role { get; set; }
}
在Web API中,控制器是处理所有HTTP请求的对象。在解决方案资源管理器中,右键单击“控制器”。选择Add,然后选择Controller。
在给定的对话框中,选择具有读/写操作的Web API 2 Controller。将控制器命名为UsersController。它将为控制器准备所有适当的CRUD操作。
在本文中,我使用虚拟用户列表准备了一个基本示例:
public class UsersController : ApiController
{
private User[] users=new User[]
{
new User { id=1, name="Haleemah Redfern", email="email1@mail.com", phone="01111111", role=1},
new User { id=2, name="Aya Bostock", email="email2@mail.com", phone="01111111", role=1},
new User { id=3, name="Sohail Perez", email="email3@mail.com", phone="01111111", role=1},
new User { id=4, name="Merryn Peck", email="email4@mail.com", phone="01111111", role=2},
new User { id=5, name="Cairon Reynolds", email="email5@mail.com", phone="01111111", role=3}
};
// GET: api/Users
[ResponseType(typeof(IEnumerable<User>))]
public IEnumerable<User> Get()
{
return users;
}
// GET: api/Users/5
public IHttpActionResult Get(int id)
{
var product=users.FirstOrDefault((p)=> p.id==id);
if (product==null)
{
return NotFound();
}
return Ok(product);
}
...
现在,您可以构建解决方案(在Visual Studio中按Ctrl + Shift + B)。一旦构建成功,您就可以运行它。单击F5,它将在您的浏览器中自动在您的本地主机的可用端口(例如http:// localhost:61024 /)中打开。最有可能的是,您不希望它始终在Visual Studio中运行,因此最好将其保留为服务。
在这种情况下,我们可以使用IIS(Internet信息服务)将其部署到本地专用服务器。这很简单。
首先,打开IIS,在“站点”下面的左侧 - 添加新网站(从右侧面板或右键单击“站点”)。请输入以下详细信息:站点名称,“webapi.localhost.net”; 物理路径,“C:\ projects \ webapi”(解决方案所在的位置); 绑定 - http或https; 主机名是相同的,即“webapi.localhost.net”。单击确定。
IIS应该在webapi.localhost.net上运行Web API服务。
现在,如果您尝试在浏览器中打开webapi.localhost.net,它将无法打开我们创建的结果。这是因为浏览器尝试将此地址(webapi.localhost.net)解析为全局域。为了将此域名映射到本地服务器,我们需要修改本地主机文件。在Windows(v10)上,hosts文件存在于C:\ Windows \ system32 \ drivers \ etc文件夹中。该文件没有自己的扩展名,它是“主机”文件。
将其复制到另一个位置并在编辑器中打开它
您需要将以下内容添加到此文件的末尾:
#Web API主机
127 .0.0.1 webapi.localhost.net
现在,您需要将修改后的文件放回C:\ Windows \ system32 \ drivers \ etc文件夹中。由于此文件夹默认受Windows保护,因此您将收到拒绝访问警告消息。因此,您需要复制“以管理员身份”文件。
文件更新后,webapi.localhost.net应从您的localhost(C:\ projects \ webapi)加载。
是时候测试我们为Web服务器创建的API方法了: api/users and api/users/{id}。 在浏览器中打开http://webapi.localhost.net/api/users。你应该得到以下输出:
在我们创建可从IDE外部访问的外部API时,我们需要从另一个页面测试我们的API。最简单的方法是通过开发工具栏(存在于任何现代浏览器中)。通常在按F12时会激活它。转到“控制台”标签。下面我准备了两个小例子,你可以用来测试API
如果jQuery可用,您可以使用:
$.ajax({
type: "GET",
url: 'http://webapi.localhost.net/api/users',
success: (data)=> {
console.log(data);
}
});
否则,使用本机JavaScript,您可以使用以下代码:
var xhr=new XMLHttpRequest();
xhr.open('GET', 'https://webapi.localhost.net/api/users');
xhr.onload=function() {
console.log(xhr.response);
};
xhr.send();
您很可能会收到以下错误:
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。
原因是常规网页可以使用该 XMLHttpRequest 对象从远程服务器发送和接收数据,但它们受到相同原始策略的限制。扩展不是那么有限。扩展可以与其来源之外的远程服务器通信,只要它首先请求跨源权限即可。
跨源资源共享(CORS)是一种机制,它使用其他HTTP标头告诉浏览器让在一个源(域)上运行的Web应用程序有权从不同来源的服务器访问所选资源。
为了解决这个问题,我们需要在我们的解决方案中启用CORS。在Visual Studio中,打开包管理控制台(可在屏幕底部,错误列表和输出之间)。
运行以下命令:
Install-Package Microsoft.AspNet.WebApi.Cors
这将安装WebApi.Cors参考。然后打开“App_Start \ WebApiConfig.cs”文件。加config.EnableCors();之前config.MapHttpAttributeRoutes();
然后返回我们的UsersController.cs并[EnableCors(origins: "*", headers: "*", methods: "*")]在类定义之前添加。
最后 - 再次重建项目。然后尝试再次测试API; 现在它应该工作。
我希望你喜欢我们的文章,你发现它很有用。
*请认真填写需求信息,我们会在24小时内与您取得联系。