[TOC]

WebApi和MVC的区别

MVC:完整的Web开发框架,网站开发框架,包含了业务处理+用户UI;

WebApi:其实就是一个服务接口,主要作用是用来服务的;一种对外的接口;用它来无法独立完成一套web开发,需要和前端配合完成;WebApi主要负责处理业务,不管用户的UI界面;Webapi性能更加优于MVC;更加轻巧;WCF,WebService;网络服务; 更多适合移动端配置; 数据传输—-JSON

RESTful架构风格

  • 资源与URI
  • 统一资源接口 资源的表述
  • 资源的链接 状态的转移
  • MVC—调用Action本质是调用方法;在服务端统一处理;
  • RestFull:不再是调用方法;把服务资源化;看做一个整体;然后对外提供一个URI——统一资源定位器;提供Get/Post/Put/Delete/Patch 五种操作;
  • 资源化——其实WebApi一般情况下,很少遵循RestFull

资源:

WebApi

Swagger版本控制


        //定义版本号
         public class CustomApiVersions
        {
            public enum ApiVersions
            {
                V1 = 1,
                V2 = 2,
                V3 = 3,
                V4 = 4,
                V5 = 5
            }
        }

        ///配置
        public void ConfigureServices(IServiceCollection services)
        {
             services.AddSwaggerGen(c =>
            {
                typeof(ApiVersions).GetEnumNames().ToList().ForEach(version =>
                {
                    c.SwaggerDoc(version, new OpenApiInfo()
                    {
                        Title = $"{version}:AspNetCoreDemo.WebApi",
                        Version = version,
                        Description = $"v1版本的coreWebApi {version} 版本"
                    }); 
                });

                #region 为Swagger JSON and UI设置xml文档注释路径 
                string basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径)
                string xmlPath = Path.Combine(basePath, "Zhaoxi.AspNetCoreDemo.WebApi.xml");

                c.IncludeXmlComments(xmlPath,true);
                #endregion              
            });
      }




    [Route("api/[controller]")]
    [ApiExplorerSettings(GroupName = "V2")]//标识版本
    [ApiController]
    public class V2FirstController : ControllerBase
    {
        [HttpGet]
        [Route("api/[controller]/GetStringV2")]
        public string GetToString()
        {
            return Newtonsoft.Json.JsonConvert.SerializeObject(new
            {
                Id = 123,
                Name = "张三"
            });
        }
   }

WebApi路由&特性路由

特性路由:最优先!
template:中括号代表 变量
控制器上标的Route模板和Action上标记Route模板内容会链接起来
如果加上特性路由以后:确定到方法了,以路由定义的名称为准
///[Route(“api/[controller]”)]

WebApi后台调用详析

后台模拟Http请求

脚本请求:前后端分离,前端一个项目纯前端的代码;后端就是api;

大型系统中:MVC包含了很多子系统;自系统运行,又独立很多服务出来;
分布式:多个服务;一个请求是多个服务串行,处理整个请求;

WebApi跨域请求

image.png

这就是跨域请求给我们展示的错误: 报错!
报错了:会不会是服务端的错误;要么就是脚本有问题;

你们觉得整个请求到了服务端了吗?

请求会到到服务器;只是服务器在响应给浏览器的时候,因为浏览器的同源策略限定,不让发送请求者使用这个结果!

  1. 同源策略

image.png
同源策略 是由NetScape提出的一个著名的安全策略。所谓的同源,指的是协议,域名,端口相同。浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,浏览器认为这个资源不安全,不能用。

同源策略的作用是什么?是为了保护服务器;

一是来自一个源的js只能读写自己源的存储不能读写其他源的存储,存储包括Cookie、Session Storage、Local Storage、Cache、Indexed DB等。

2.解决跨域

1.JSONP —-前端开发者使用较多
2.通过后台模拟Http请求请求Api 本质是避开浏览器同源策略
3.在服务器端指定允许你跨域—浏览器的同源策略是为了保护服务器,如果服务器直接声明,说可以放心

JSONP:使用可以避开浏览的同源策略的一些Html标签;