当前位置:首页 » 网页前端 » webapi系列教程
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

webapi系列教程

发布时间: 2022-10-30 01:56:49

‘壹’ 想学web前端需要学什么知识

随着互联网的发展,各种小程序、APP以及很多的互联网+创业公司的兴起,对现在前端工程的要求也越来越高,如何适应目前IT行业时代的发展趋势,web前端工程师又需要掌握那些技能呢?

一、HTML5+CSS3

HTML是网页的主要组成部分,网页的本质就是HTML,是用来制作超文本文档的简单标记语言;CSS样式是对HTML语言的有效补充,通过使用CSS样式,便于页面的修改以及页面风格的统一,还可以减少页面的体积,通过HTML和CSS完成静态页面的布局。HTML5+CSS3是HTML+CSS的更新,增加了很多非常实用的功能。这部分主要是从PC端和移动端两方面掌握整体的页面布局技术,并且配合项目实战操练、学以致用。

二、JS交互设计

这一部分主要掌握JS的基本语法、算法和高级语法,熟练使用面向对象的思想进行DOM编程,通过JQuery经典案例学习精通JQuery技术。

通过以上介绍,相信大家都了解了web前端开发需要学习的内容了,现在随着行业而发展,对前端的要求也越来越高,对高端人才的需求也越来越多,只有大家掌握的知识越多,掌握的技能越全面,越好,之后的选择权才会更多,发展前景更好。

‘贰’ WebApi 2 路由机制

.net中包含的路由有两种,第一种是MVC模式的按url匹配action,第二种是WebApi模式的按http请求的方法匹配action,本文我们学习WebApi的路由模式。

首先新建一个WebApi项目,选择ASP.NET Web应用程序(.NET Framework)

这里我们首先来看WebApi的基础配置 WebApiConfig.cs ,其路径为 /App_Start/WebApiConfig.cs

首先以浏览器启动webapi项目

会发现页面显示403,这是很正常的,因为我们在新建项目的时候没有加入MVC,所以没有可视化的view页面,不过我们却拿到了这个项目的 端口号

为了更加方便直观的看我们的接口请求,我们选择postman,首先在项目新建一个 controller

通过以上的操作,我们就搭建好了一个webApi2的项目工程,后面我们就在这个工程的基础上进行webApi 2的开发和学习。

webApi的路由过程主要经历了如下三步

WebApiConfig.cs 这个文件是进行路由表的核心文件, WebApiConfig 里面只有一个方法,这个方法在 Global.asax 文件里的 Application_Start() 方法被调用, Global.asax 文件是一个全局文件,当我们网页启动时就会去执行它。 Register(HttpConfiguration config) 方法是配置WEB API路由的。

因此 在webAP工程启动的时候,会执行 Global.asax ,这个文件里面注册了 WebApiConfig.cs 的一系列初始化配置,从而实现了webapi。

WebApi 2 框架使用路由表。 并由Web API 的 Visual Studio 项目模板创建默认路由

转到 MapHttpRoute 的定义,可以看到它有4个重载

分别来看看各个参数的作用

webApi2工程自动为我们创建了默认的路由

经过上面的讲解,我们知道了匹配的URL是 api/{controller}/{id}
那么我们在实际的请求中应该如何请求

新建一个 StudentsController

依次对以下地址进行请求

总结:

默认路由的缺点

如下

添加如下的方法(action)

得到了一下的结果

我们来看看这个请求是如何进行匹配的,首先找到 /App_Start/WebApiConfig.cs

按照路由模板来看,我们请求的路由没有 action 名称,那么它是怎么进行匹配的呢?
其实当我们访问 http://localhost:65066/api/student 这个url的时候,webapi会自动去匹配 api/{controller}/{id} 这个模板,在这个路径中,student是controller,那么它又是怎么去找到 getStudentName 这个action的呢?明明我们都没有传action这个参数,其实Webapi的路由规则是通过http方法去匹配对应的action,我们请求这个地址是用的 GET 方法,那么webapi会找Order这个控制器里面的get请求的方法,同事我们的这个 getStudentName 是以 get 开头的,它符合了webapi的匹配规则,于是就请求成功了,但前提是你写的方法必须是以get开头的,如果当前这个controller一个get开头的都没有,那么就显示 请求的资源不支持 http 方法“GET”

当然不以get开头的前提是你必须加上 [HttpGet] 这个特性,webapi才知道你这个是get的请求方法,就能正确进行匹配。

然后我们再回到 /App_Start/WebApiConfig.cs ,看下里面 MapHttpRoute 的各个参数的含义,首先转到它的定义,发现它是 HttpRouteCollection 的扩展方法, MapHttpRoute 有4类重载

在 WebApiConfig.cs 里面修改为如下的路由模板

接口请求如下

通过 action 的名称来匹配很好理解,上面的 StudentName() 是方法名, webApi 会默认它就是 action 的名称,如果你想要方法名和 action 的名称不一致,你也可以自定义 action 的名称,这个可以通过特性 ActionName 来实现,如下:

首先看路由模板

对于同请求类型,同请求参数的请求,会出现 不传参数,找不到匹配的资源 传了参数,但是找到了与该请求匹配的多个操作 的问题,如下所示

解决以上的办法有两种

如果要使用特性路由,首先在 WebApiConfig.cs 的 Register 方法里面必须先启用特性路由(一般情况下,当我们新建一个 WebApi 项目的时候,会自动在 Register 方法里面加上这句话。)

特性路由的目的是为了解决我们公共路由模板引擎解决不了的问题。一个action定义了特性路由之后,就能通过特性路由上面的路由规则找到。
只要出现了特性路由,匹配的规则是按特性路由来的
修改studentController如下

参考

参考

路由前缀的一般的做法是在控制器上面使用特性 [RoutePrefix] 来标识。
但是需要注意路由前缀不能以 / 开头

‘叁’ 怎么用混乱之治测试地图上的数据

触发器(F4)分为三个部分
开端
条件
动作
开端弄成 任意单位释放一个技能
条件 释放的技能是 XX
动作 创建一个单位XX (几十血,生命回复速度负数,隐形,无体积,魔无限)
为最后创建的单位添加技能 XX
命令最后创建的单位释放 XX
大概就是这么原理,去 WAR3.UUU9.COM 看看教程吧
对于AI来说
第一步:先把你的单位数据导出(在物体编辑器那儿点击“文件”——“输出所有物体数据”
第二步:打开AI编辑器,在“一般”选项下面有一个“自定义数”“输入”的按钮,把刚才的输出物体的物体数据输入进来,然后在“英雄”选项下面修改学习技能的顺序。完成AI,并保存为XXX
第三步:打开“输入管理器F12”,将AI文件输入,如果是人族,那么双击该文件,“使用自定义路径”,
把文件位置设置为\Scripts\huma

‘肆’ 刚学3D人物建模,求头部建模教程,文档,视频格式都可以。越详细越好,也可以说说自己的经验

你可以先去【绘学霸】网站找“3d建模”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-10y22r-340220323

想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。

自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-10y22r-340220323

在“3d建模”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。

大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载: www.huixueba.com.cn/Scripts/download.html

‘伍’ webapi stream模式文件上传分包吗

WebAPI下的如何实现参数绑定 本文将概述在WebAPI方式下将如何将参数绑定到一个action方法,包括参数是如何被读取,一系列规则决定特定环境采用的那种绑定方式,文章最后将给出一些实际的例子。 Parameter binding说到底是接到一个Http请求,将其...

‘陆’ js调用跨域get请求调用webApi 多出个options请求是为什么

我尝试用我的语言描述一下吧:

先说跨域请求的原理,浏览器的安全机制是不允许出现跨域请求的,否则会有很严重的安全问题,解决跨域问题有几种不同的方法,你题目中提到的方法就是通过在Response header中添加Access-Control-Allow-Origin 来让浏览器知道服务器所在的域,对用于访问的域进行了授权。

但是因为这个Header要服务器提供,所以无论如何,请求是要先发出去才能指导是不是允许跨域请求,所以在报跨域错误的时候,虽然报错了,但是请求实际上依然发送到服务器了,只是浏览器看了一眼服务器的返回,然后发觉不行,这个请求返回的header里没有授权,所以浏览器不能用。

这样就带来一个问题,请求会对服务器造成影响,试想一下,要使用XHR跨域提交一个表单,无论返回头里面是否添加了跨域的header,都会提交一个请求到服务器,服务器要进行相应的操作。这种情况其实在一定条件下也是可以接受的,但是如果有更大的安全隐患,就不可以了,所以就需要OPTIONS请求了。

OPTIONS请求就是在符合一定条件下的跨域请求发送之前,浏览器会先发一个OPTIONS请求,问一下服务器,是不是能跨域,如果能,就发真正的请求,如果不能,就不发了。这个的作用就很好理解了。

如上面所说,不是所有的跨域请求都要先发OPTIONS请求的,规范里面规定,以下情况不需要先发一个 OPTIONS请求:

  1. 请求类型必须是GET、HEAD、POST中的一种。

  2. 请求的Header里面只能包涵一些规范重点Header,以及规范的值,包括:Accept、Accept-Language、Content-Language、Content-Type、DPR、Downlink、Save、Data、Viewport-Width、Width

  3. Content-Type的类型必须是以下几种:application/x-www-form-urlencoded、multipart/form-data、text/plain

所以,如果你不希望浏览器多余的发一个OPTIONS请求,只要遵循这个规范就可以了。

但是有时候因为需求原因,也难避免要自定义一些Header。比如,很多JS的AJAX库,都会自定义一个Header,让服务器可以识别出这是否是一个异步请求,这样OPTIONS请求就一定要被先发送了。

顺便说,服务器端也要判断OPTIONS类型的请求,进行一系列操作,不要让OPTIONS请求影响到数据。

更多内容,可以看相关资料和文档:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

https://developer.mozilla.org/en-US/docs/Web/HTTP/Server-Side_Access_Control

https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

‘柒’ 有哪些webapi开发好用的工具

先定义一个简单的webapi,简单到差不多直接用vs2010自动生成的webapi代码。其中的TestModle是一个简单的class,如下public class TestModle { public string a { get; set; } public string b { get; set; } public string c { get; set; } }

‘捌’ 如何使 WebAPI 自动生成漂亮又实用在线API文档

1.1 SwaggerUI

SwaggerUI 是一个简单的Restful API 测试和文档工具。简单、漂亮、易用(官方demo)。通过读取JSON 配置显示API. 项目本身仅仅也只依赖一些 html,css.js静态文件. 你可以几乎放在任何Web容器上使用。

1.2 Swashbuckle

Swashbuckle 是.NET类库,可以将WebAPI所有开放的控制器方法生成对应SwaggerUI的JSON配置。再通过SwaggerUI 显示出来。类库中已经包含SwaggerUI 。所以不需要额外安装。

2.快速开始

创建项目 OnlineAPI来封装网络音乐服务(示例下载) ,通过API可以搜索、获取音乐的信息和播放连接。

我尽量删除一些我们demo中不会用到的一些文件,使其看上去比较简洁。

WebAPI 安装 Swashbuckle

Install-Package Swashbuckle

代码注释生成文档说明。
Swashbuckle 是通过生成的XML文件来读取注释的,生成 SwaggerUI,JSON 配置中的说明的。
安装时会在项目目录 App_Start 文件夹下生成一个 SwaggerConfig.cs 配置文件,用于配置 SwaggerUI 相关展示行为的。如图:

将配置文件大概99行注释去掉并修改为
c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name));

并在当前类中添加一个方法

/// <summary>
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
protected static string GetXmlCommentsPath(string name)
{
return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, name);
}

紧接着你在此Web项目属性生成选卡中勾选 “XML 文档文件”,编译过程中生成类库的注释文件

添加网络音乐 3个API

访问 http://<youhost>/swagger/ui/index,最终显示效果

我们通过API 测试API 是否成功运行

3.添加自定义HTTP Header

在开发移动端 API时常常需要验证权限,验证参数放在Http请求头中是再好不过了。WebAPI配合过滤器验证权限即可

首先我们需要创建一个 IOperationFilter 接口的类。IOperationFilter
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Http.Description;
using System.Web.Http.Filters;
using Swashbuckle.Swagger;

namespace OnlineAPI.Utility
{
public class HttpHeaderFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry
schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null) operation.parameters = new
List<Parameter>();
var filterPipeline =
apiDescription.ActionDescriptor.GetFilterPipeline();
//判断是否添加权限过滤器
var isAuthorized = filterPipeline.Select(filterInfo =>
filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);
//判断是否允许匿名方法
var allowAnonymous =
apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();

if (isAuthorized && !allowAnonymous)
{
operation.parameters.Add(new Parameter
{
name = "access-key",
@in = "header",
description = "用户访问Key",
required = false,
type = "string"
});
}
}
}
}

在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法类添加一行注册代码
c.OperationFilter<HttpHeaderFilter>();

添加Web权限过滤器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;
using Newtonsoft.Json;

namespace OnlineAPI.Utility
{
/// <summary>
///
/// </summary>
public class AccessKeyAttribute : AuthorizeAttribute
{
/// <summary>
/// 权限验证
/// </summary>
/// <param name="actionContext"></param>
/// <returns></returns>
protected override bool IsAuthorized(HttpActionContext actionContext)
{
var request = actionContext.Request;
if (request.Headers.Contains("access-key"))
{
var accessKey = request.Headers.GetValues("access-key").SingleOrDefault();
//TODO 验证Key
return accessKey == "123456789";
}
return false;
}

/// <summary>
/// 处理未授权的请求
/// </summary>
/// <param name="actionContext"></param>
protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
{
var content = JsonConvert.SerializeObject(new {State = HttpStatusCode.Unauthorized});
actionContext.Response = new HttpResponseMessage
{
Content = new StringContent(content, Encoding.UTF8, "application/json"),
StatusCode = HttpStatusCode.Unauthorized
};
}
}
}

在你想要的ApiController 或者是 Action 添加过滤器
[AccessKey]

最终显示效果

4.显示上传文件参数

SwaggerUI 有上传文件的功能和添加自定义HTTP Header 做法类似,只是我们通过特殊的设置来标示API具有上传文件的功能
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Description;
using Swashbuckle.Swagger;

namespace OnlineAPI.Utility
{
/// <summary>
///
/// </summary>
public class UploadFilter : IOperationFilter
{

/// <summary>
/// 文件上传
/// </summary>
/// <param name="operation"></param>
/// <param name="schemaRegistry"></param>
/// <param name="apiDescription"></param>
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (!string.IsNullOrWhiteSpace(operation.summary) && operation.summary.Contains("upload"))
{
operation.consumes.Add("application/form-data");
operation.parameters.Add(new Parameter
{
name = "file",
@in = "formData",
required = true,
type = "file"
});
}
}
}
}

在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法类添加一行注册代码
c.OperationFilter<UploadFilter>();

API 文档展示效果