
API安全:基于令牌的验证 vs 基于密钥的验证,哪种更可靠?
近年来,很明显HTTP不仅仅用于提供HTML页面。它也是构建Web APIs的强大平台,使用了一些动词(GET、POST等)和一些简单的概念,如_URIs_和headers。ASP。NET Web API是一组简化HTTP编程的组件。因为它是建立在ASP。NET MVC运行时,Web API自动处理HTTP的低层传输细节。与此同时,Web API自然地公开了HTTP编程模型。事实上,Web API的一个目标是不抽象HTTP的真实性。因此,Web API既灵活又易于扩展。REST架构风格已被证明是利用HTTP的有效方法,尽管它肯定不是HTTP的唯一有效方法。联系人管理器将公开RESTful,用于列出、添加和删除联系人等。
本实验室要求您对HTTP、REST有基本的了解,并假设您对HTML、JavaScript和jQuery有基本的工作知识。
在这个动手实验中,您将学习如何:
完成这个动手实验需要以下内容:
安装代码段
为了方便起见,您将在此实验室中管理的大部分代码都可以作为Visual Studio code片段使用。要安装代码片段,请运行源设置代码段.vsi文件。
如果您不熟悉Visual Studio Code代码段,并想了解如何使用它们,可以参考本文档的附录“附录A:使用代码段”。
本实践实验室包括以下练习:
每个练习都附有一个End文件夹,其中包含完成练习后应获得的解决方案。如果你需要额外的帮助来完成练习,你可以使用这个解决方案作为指导。
完成本实验的预计时间:60分钟。
在本练习中,您将为联系人管理器实现只读GET方法。
在此任务中,您将使用新的ASP。NET web项目模板来创建web API web应用程序。
运行Visual Studio 2012学习版Web,若要执行此操作,请go开始并键入**VS学习版Web*,然后按输入**。
从文件菜单中,选择新建项目。选择**Visual C
创建新的ASP。NET MVC 4.0 Web应用程序项目
在ASP中。NET MVC 4项目类型对话框,选择Web API项目类型。单击确定。
指定Web API项目类型(S)
在此任务中,您将创建API方法将驻留在其中的控制器类。
从项目中删除Controllers文件夹中名为ValuesController.cs的文件。
右键单击项目中的控制器文件夹,然后从上下文菜单中选择添加|控制器。
向项目添加新控制器
在出现的添加控制器对话框中,从模板菜单中选择空API控制器。将控制器类命名为ContactController。然后,单击添加
使用“添加控制器”对话框创建新的Web API控制器(U)
(代码段-Web API实验室-Ex01-获取API方法)
publicstring[]Get()
{
returnnewstring[]
{
"Hello",
"[World](https://www.explinks.com/provider/uid20241114923216711076)"
;
按F5调试应用程序。应该显示Web API项目的默认主页。
ASP的默认主页。NET Web API应用程序
在Internet Explorer窗口中,按F12键打开开发人员工具窗口。单击网络选项卡,然后单击开始捕获按钮,开始将网络流量捕获到窗口中。
打开网络选项卡并启动网络捕获
在浏览器的地址栏中用/api/contact附加URL,然后按回车键。传输详细信息将显示在网络捕获窗口中。请注意,响应的MIME类型为application/json。这演示了默认输出格式是JSON。
在“网络”视图中查看Web API请求的输出(V)
Internet Explorer 10此时的默认行为是询问用户是否要保存或打开Web API调用产生的流。输出将是一个文本文件,其中包含Web API URL调用的JSON结果。不要取消对话框,以便能够通过开发人员工具窗口查看响应的内容。
单击Go详细查看按钮,查看有关此API调用响应的更多详细信息。
切换到详细视图
单击响应正文选项卡查看实际的JSON响应文本。
在网络监视器中查看JSON输出文本
在此任务中,您将创建将驻留API方法的控制器类。
右键单击模型文件夹,然后选择添加|类。..从上下文菜单中选择。
向web应用程序添加新模型
在添加新项对话框中,将新文件命名为Contact.cs,然后单击添加
创建新的Contact类文件
(代码段-Web API实验室-Ex01-联系类别)
public string Name { get; set;
在ContactController类中,选择Get方法的方法定义中的单词string,然后键入单词Contact。输入单词后,单词联系人的开头将出现一个指示符。按住Ctrl+键并按句点(.)键,或使用鼠标单击图标打开代码编辑器中的帮助对话框,以自动填写Models命名空间的using指令。
使用Intellisense辅助进行命名空间声明
(代码段-Web API实验室-Ex01-返回联系人列表)
public Contact[] Get()
{
return new Contact[]
{
new Contact
{
名称=“格伦·布洛克”,
Name = "Glenn Block"
,
new Contact
{
名字=“丹·罗斯”,
Name = "Dan Roth"
;
1.浏览器打开后,如果开发人员工具尚未打开,请按F12。
2.单击网络选项卡。
3.按下开始捕获按钮。
4.将URL后缀/api/联系人添加到地址栏中的URL,然后按输入键。
5.按Go详细视图按钮。
6.选择响应体选项卡。您应该看到一个JSON字符串,表示Contact实例数组的序列化形式。
复杂Web API方法调用的JSON序列化输出(JSON)
本任务将演示如何将功能提取到服务层,使开发人员能够轻松地将他们的服务功能与控制器层分离,从而允许实际完成工作的服务的可重用性。
在解决方案根目录中创建一个新文件夹,并将其命名为Services。为此,右键单击ContactManager项目,选择添加|新建文件夹,将其命名为Services。
创建服务文件夹
右键单击服务文件夹,然后选择添加|类。..从上下文菜单中选择。
将新类添加到Services文件夹
出现添加新项对话框时,将新类命名为ContactRepository,然后单击添加。
创建类文件以包含联系人存储库服务层的代码
在ContactRepository.cs文件中添加一个using指令,以包含模型命名空间。
using ContactManager.Models;
将以下突出显示的代码添加到ContactRepository.cs文件中,以实现GetAllContacts方法。
(代码段-Web API实验室-Ex01-联系存储库)
public class ContactRepository
{
public Contact[] GetAllContacts()
{
return new Contact[]
{
new Contact
{
名称=“格伦·布洛克”,
Name = "Glenn Block"
,
new Contact
{
名字=“丹·罗斯”,
Name = "Dan Roth"
;
打开ContactController.cs文件(如果尚未打开)。
将以下using语句添加到文件的命名空间声明部分。
using ContactManager.Services;
将以下突出显示的代码添加到ContactController.cs类中,以添加一个私有字段来表示存储库的实例,以便其他类成员可以使用服务实现。
(代码段-Web API实验室-Ex01-联系控制器)
publicContactController()
{
this.contactRepository=newContactRepository();
...
(代码段-Web API实验室-Ex01-通过存储库返回联系人列表)
publicContact[]Get()
{
returncontactRepository.GetAllContacts();
_向触点控制器11添加断点。按F5运行应用程序。 12.浏览器打开后,按F12打开开发人员工具。 13.单击网络选项卡。单击开始捕获按钮。 15.在地址栏中添加后缀/api/contact的URL,然后按输入加载api控制器。 16.一旦Get方法开始执行,Visual Studio 2012就会中断。
Get方法中的突破 17。按F5继续。 18.如果Internet Explorer尚未处于焦点,请Go它。注意网络捕获窗口。
_显示Web API调用结果的Internet Explorer中的网络视图_19。单击Go详细视图按钮。 20.单击响应主体选项卡。注意API调用的JSON输出,以及它如何表示服务层检索到的两个联系人。
在开发人员工具窗口中查看Web API的JSON输出(V)
在本练习中,您将为联系人管理器实现POST和PUT方法,以使其具有数据编辑功能。
在本任务中,您将准备增强练习1中创建的Web API项目,使其能够接受用户输入。
运行Visual Studio 2012学习版Web,若要执行此操作,请go开始并键入**VS学习版Web*,然后按输入**。
打开位于Source/Ex02 ReadWriteWebAPI/Begint/文件夹中的Begin解决方案。否则,您可以继续使用通过完成上一个练习获得的结束解决方案。
1.如果您打开了提供的开始解决方案,则需要下载一些缺少的NuGet包才能继续。为此,请单击项目菜单,然后选择管理NuGet包。
2.在管理NuGet包对话框中,单击还原以下载丢失的包。
3.最后,通过单击构建|构建解决方案来构建解决方案。
使用NuGet的一个优点是,您不必在项目中发布所有库,从而减小了项目规模。使用NuGet Power Tools,通过在Packages.config文件中指定包版本,您将能够在第一次运行项目时下载所有必需的库。这就是为什么在从该实验室打开现有解决方案后,您必须运行这些步骤。
在此任务中,您将增强练习1中创建的Web API项目的ContactRepository类,以便它可以持久化并接受用户输入和新的Contact实例。
将以下常量添加到ContactRepository类中,以表示本练习稍后的web服务器缓存项键名的名称。
privateconststringCacheKey="ContactStore";
向ContactRepository添加一个构造函数,其中包含以下代码。
(代码段-Web API实验室-Ex02-联系存储库构造器)
如果(ctx!=空)
ctx.Cache[CacheKey] = contacts;
(代码段-Web API实验室-Ex02-获取所有联系人)
如果(ctx!=空)
returnnewContact[]
{
newContact
{
Id=0,
Name="Placeholder"
;
此示例用于演示目的,将使用web服务器的缓存作为存储介质,以便多个客户端可以同时使用这些值,而不是使用会话存储机制或请求存储生命周期。可以使用实体框架、XML存储或任何其他类型来代替web服务器缓存。
(代码段-Web API实验室-Ex02-实现SaveContact方法)
如果(ctx!=空)
返回true;
return false;
在本练习中,您将创建一个HTML客户端来调用Web API。该客户端将使用JavaScript促进与Web API的数据交换,并将使用HTML标记在Web浏览器中显示结果。
在此任务中,您将修改web应用程序的默认索引视图,以支持在HTML浏览器中显示现有联系人列表的要求。
打开Visual Studio 2012 Web学习版(如果尚未打开)。
打开位于Source/Ex03 ConsumingWebAPI/Begint/文件夹中的Begin解决方案。否则,您可以继续使用通过完成上一个练习获得的结束解决方案。
1.如果您打开了提供的开始解决方案,则需要下载一些缺少的NuGet包才能继续。为此,请单击项目菜单,然后选择管理NuGet包。
2.在管理NuGet包对话框中,单击还原以下载丢失的包。
3.最后,通过单击构建|构建解决方案来构建解决方案。
使用NuGet的一个优点是,您不必在项目中发布所有库,从而减小了项目规模。使用NuGet Power Tools,通过在Packages.config文件中指定包版本,您将能够在第一次运行项目时下载所有必需的库。这就是为什么在从该实验室打开现有解决方案后,您必须运行这些步骤。
打开位于Views/Home文件夹中的Index.cshtml文件。
将div元素中的HTML代码替换为idbody,使其看起来像以下代码。
打开ContactController.cs文件(如果尚未打开)。
在ContactController类的Get方法上放置断点。
_在API控制器的Get方法上放置断点(P)
确保您正在浏览应用程序的根URL。
加载页面并执行JavaScript后,断点将被命中,代码执行将在控制器中暂停。
使用Visual Studio 2012学习版Web调试Web API调用(D)
删除断点,按F5或调试工具栏的继续按钮,继续在浏览器中加载视图。一旦Web API调用完成,您应该会看到从Web API调用返回的联系人在浏览器中显示为列表项。
_在浏览器中显示为列表项的API调用结果(R)
在此任务中,您将继续修改MVC应用程序的索引视图。将向HTML页面添加一个表单,该表单将捕获用户输入并将其发送到Web API以创建新的联系人,并将创建一个新的Web API控制器方法以从GUI收集日期。
打开ContactController.cs文件。
向名为Post的控制器类添加一个新方法,如下代码所示。
(代码段-Web API实验室-Ex03-后方法_)
var响应=请求。CreateResponse(System.Net.HttpStatusCode.Created,联系人);
returnresponse;
如果尚未打开,请在Visual Studio中打开Index.cshtml文件。
将下面的HTML代码添加到您在上一个任务中添加的无序列表之后的文件中。
在ContactController.cs中,在Post方法上放置断点。
按F5在浏览器中运行应用程序。
在浏览器中加载页面后,键入新的联系人姓名和Id,然后单击保存按钮。
浏览器中加载的客户端HTML文档
当调试器窗口在Post方法中中断时,请查看contact参数的属性。这些值应与您在表单中输入的数据相匹配。
_从客户端发送到Web API的联系人对象(T)
_在调试器中创建后的响应_11。如果按F5或在调试器中单击继续,请求将完成。切换回浏览器后,新联系人已添加到ContactRepository实现存储的联系人列表中。
浏览器反映新联系人实例的成功创建
此外,您可以按照附录C将此应用程序部署到Azure(微软云平台):发布ASP。NET MVC 4应用程序使用Web部署。
这个实验室向你介绍了新的ASP。NET Web API框架,以及使用该框架实现RESTful Web APIs。从这里,您可以创建一个新的存储库,使用任何数量的机制和连接来促进数据持久性,而不是本实验室中提供的简单的服务。Web API支持许多附加功能,例如允许使用支持HTTP、JSON或XML的任何语言编写的非HTML客户端进行通信。也可以在典型的Web应用程序之外托管Web API,还可以创建自己的序列化格式。
有了代码片段,您就可以轻松获取所需的所有代码。实验室文档将告诉您何时可以使用它们,如下图所示。
使用Visual Studio code片段将代码插入到项目中(U)
将光标放在要插入代码的位置。
开始键入代码段名称(不含空格或连字符)。
观察IntelliSense显示匹配的代码段名称。
选择正确的代码段(或继续键入,直到选择了整个代码段的名称)。
按Tab键两次将代码段插入光标位置。
开始键入代码段名称
按Tab键选择突出显示的代码段
再次按Tab键,代码段将展开
1.右键单击要插入代码段的位置。
选择插入代码段,然后选择我的代码段。
点击列表中的相关片段。
右键单击要插入代码段的位置,然后选择插入代码段
点击列表中的相关片段
Go /is/extensions/introduction到-iis-express/is–express-overview?链接ID=9810169。或者,如果您已经安装了Web平台安装程序,则可以打开它并搜索产品“Visual Studio Express 2012 for Web with Azure(微软云平台)SDK”。
单击立即安装。如果您没有Web平台安装程序,您将被重定向到先下载并安装它。
打开Web平台安装程序后,单击安装开始安装。
安装Visual Studio学习版
阅读所有产品的许可证和条款,然后单击我接受继续。
接受许可条款
等待下载和安装过程完成。
安装进度
安装完成后,单击完成。
安装完成
单击退出关闭Web平台安装程序。
若要打开Visual Studio Express for Web,请go开始屏幕并开始写入“VS Express”,然后单击VS Express for Web磁贴。
VS Express用于Web互动程序
本附录将向您展示如何利用Azure(微软云平台)提供的web Deploy发布特征(feature),从Azure(微软云平台)门户网站创建新网站,并发布您通过跟踪实验室获得的应用程序。
使用Azure(微软云平台),您可以托管10个ASP。NET网站免费,然后随着流量的增长而扩展。你可以在这里注册。
登录门户
单击命令栏上的新建。
创建新网站
Azure(微软云平台)是运行在云中的web应用程序的主机,您可以控制和管理该应用程序。快速创建选项允许您从门户外部将已完成的web应用程序部署到Azure(微软云平台)。它不包括设置数据库的步骤。
使用快速创建创建新网站
等待新的网站创建。
创建网站后,单击URL列下的链接。检查新网站是否正常工作。
浏览新网站
网站正在运行
Go返回门户,单击名称栏下的网站名称以显示管理页面。
打开网站管理页面
_publish profile_包含为每个启用的发布方法将web应用程序发布到Azure(微软云平台)所需的所有信息。发布配置文件包含连接到启用发布方法的每个端点并对其进行身份验证所需的URL、用户凭据和数据库字符串。Microsoft WebMatrix 2、Microsoft Visual Studio Express for Web和Microsoft Visual Studio 2012支持读取发布配置文件,以自动配置这些程序,以便将Web应用程序发布到Azure(微软云平台)。
下载网站发布配置文件
将发布配置文件下载到已知位置。在本练习中,您将进一步了解如何使用此文件将web应用程序从Visual Studio发布到Azure(微软云平台)。
保存发布配置文件
如果您的应用程序使用SQL Server数据库,则需要创建一个SQL数据库服务器。如果要部署不使用SQL Server的简单应用程序,可以跳过此任务。
您需要一个SQL数据库服务器来存储应用程序数据库。您可以在Azure(微软云平台)管理门户的SQL数据库|服务器|Server的仪表板中查看订阅中的SQL数据库服务器。如果您没有创建服务器,可以使用命令栏上的添加按钮创建一个。记下服务器名称和URL、管理员登录名和密码,因为您将在接下来的任务中使用它们。不要创建数据库,因为它将在稍后阶段创建。
SQL数据库服务器仪表板
在下一个任务中,您将测试来自Visual Studio的数据库连接,因此您需要将本地IP地址包含在服务器的允许的IP地址列表中。为此,单击配置,从当前客户端IP地址中选择IP地址,并将其粘贴到起始IP地址和结束IP地址文本框中,然后单击!图48:添加客户端ip地址确定按钮。
添加客户端IP地址
将客户端IP地址添加到允许的IP地址列表后,单击保存以确认更改。
确认更改
1.Go返回ASP。NET MVC 4解决方案。在解决方案资源管理器中,右键单击网站项目并选择发布。
发布网站
导入您在第一个任务中保存的发布配置文件。
导入发布配置文件
一旦您看到“验证连接”按钮旁边出现绿色复选标记,验证即完成。
验证连接
在设置页面的数据库部分下,单击数据库连接文本框旁边的按钮(即DefaultConnection)。
Web部署配置
*在服务器名称中,使用_tcp:_前缀键入SQL数据库服务器URL。
*在用户名中键入您的服务器管理员登录名。
*在密码中键入您的服务器管理员登录密码。
*键入新的数据库名称,例如:MVC4SampleDB。
配置目标连接字符串
然后单击确定。当系统提示创建数据库时,单击是。
创建数据库
将用于连接到Windows Azure(微软云平台)中的SQL数据库的连接字符串显示在“默认连接”文本框中。然后单击下一步。
指向SQL数据库的连接字符串
在预览页面中,单击发布。
发布web应用程序
发布过程完成后,默认浏览器将打开已发布的网站。
应用程序已发布到Azure
原文链接: https://learn.microsoft.com/en-us/aspnet/web-api/overview/older-versions/build-restful-apis-with-aspnet-web-api