探索ASP.NET Framework WebAPI的简介与应用

这篇具有很好参考价值的文章主要介绍了探索ASP.NET Framework WebAPI的简介与应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是WebAPI?

1.1-什么是WebAPI?

WebAPI是一种用开发系统接口、设备接口API的技术,基于Http协议,请求和返回格式默认是Json格式。比WCF简单、更通用;比WebService更节省流量,更简洁。


1.2-WebAPI的特点?

  • Action方法直接返回对象,专注于数据
  • 更符合Restful的风格
  • 有利于独立于IIS部署
  • Action可以直接声明为async

二、什么是Restful?

2.1-传统的Http接口怎么设计?

探索ASP.NET Framework WebAPI的简介与应用


2.2-Http设计之初"谓词语义"?

  • GET:查询获取
  • POST:添加
  • Put:修改
  • Delete:删除

2.3-Http设计之初"谓词语义"带来的好处是什么?

  • 为不同的请求做不同的权限的控制;
  • 不需要"Delete","AddNew"这样的Action名字,根据请求的类型就可以判断
  • 返回报文的格式也确定,不用在约定返回状态码,充分利用Http状态码
  • 有利于系统优化,浏览器可以自动缓存Get请求
  • Get没有副作用,是幂等的,可以重试。

注意:返回结果尽量根据Http状态码返回。


三、简单的WebAPI(.NET Framework)

3.1-简单WebAPI和是使用异步方式调用

   /// <summary>
    /// 需要继承自ApiController
    /// </summary>
    public class PersonController : ApiController
    {
        public string[] Get() {
            return new string[] { "西瓜程序猿", "Albert" };
        }

        public string Get(int id) {
            return $"Haha:" + id;
        }

        public string Get(string name) {
            return name;
        }

    }
}

探索ASP.NET Framework WebAPI的简介与应用


3.2-WebAPI的参数

探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用


3.3-WebAPI的返回值

探索ASP.NET Framework WebAPI的简介与应用

        /// <summary>
        /// HttpResponseMessage类型
        /// 返回报文头、内容等等信息(控制相应的内容)
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Test3")]
        public HttpResponseMessage Test3() {
            HttpResponseMessage msg = new HttpResponseMessage();
            msg.Content =new StringContent( "报文体");
            msg.Headers.Add("Haha", "这是请求头体");
            msg.StatusCode = System.Net.HttpStatusCode.OK;
            msg.Headers.Age = TimeSpan.FromDays(3);
            return msg;
        }

3.4-通过自定义路由处理API多版本

探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用


3.5-通过ControllerSelector实现多版本(配置路由规则)

(1)创建2个版本控制器
探索ASP.NET Framework WebAPI的简介与应用
(2)在【WebApiConfig】的Register中,添加1个路由规则,并替换IHttpControllerSelector

 config.Routes.MapHttpRoute(
                name: "DefaultApiV1",
                routeTemplate: "api/v1/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );


            //添加一个路由规则
            config.Routes.MapHttpRoute(
                name: "DefaultApiV2",
                routeTemplate: "api/v2/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );


            //替换
            config.Services.Replace(typeof(IHttpControllerSelector), new VersionControllerSelector(config));

(3)VersionControllerSelector.cs代码如下:

namespace Demo
{
    /// <summary>
    /// 用来控制API版本
    /// 需要继承自DefaultHttpControllerSelector
    /// </summary>
    public class VersionControllerSelector : DefaultHttpControllerSelector
    {
        private readonly HttpConfiguration _config;
        private IDictionary<string, HttpControllerDescriptor> _ctlMapping;

        public VersionControllerSelector(HttpConfiguration config) : base(config)
        {
            this._config = config;
        }


        public override IDictionary<string, HttpControllerDescriptor> GetControllerMapping()
        {
            Dictionary<string, HttpControllerDescriptor> dict = new Dictionary<string, HttpControllerDescriptor>();
            //加载所有程序集,然后遍历
            foreach (var asm in _config.Services.GetAssembliesResolver().GetAssemblies())
            {
                //获得程序集所有的类,并且该类不是抽象类,并且继承自ApiController
                var controllerTypes = asm.GetTypes().Where(u => u.IsAbstract == false && typeof(ApiController).IsAssignableFrom(u));
                //遍历并生成名字
                foreach (var ctrlType in controllerTypes)
                {
                    string ctrolTypeNS = ctrlType.Namespace;//获取命名空间名称
                    var match = Regex.Match(ctrolTypeNS, @"\.v(\d)");//获得需要的名称
                    if (!match.Success)
                    {
                        continue;
                    }

                    string verNum = match.Groups[1].Value;//拿到版本号1提取出来
                    string ctrlTypeName = ctrlType.Name;//拿到类名(PersonController)
                   //拿到匹配的类型
                    var matchController = Regex.Match(ctrlTypeName, @"^(.+)Controller$");
                    if (!matchController.Success)
                    {
                        continue;
                    }

                    string ctrlName = matchController.Groups[1].Value;//得到合法的PersonController
                    string key = ctrlName + "v" + verNum;
                    dict[key] = new HttpControllerDescriptor(_config, ctrlName,ctrlType);
                }
            }
            _ctlMapping = dict;
            return dict;
        }


        public override HttpControllerDescriptor SelectController(HttpRequestMessage request)
        {

            //拿到controller
            string controller =(string)request.GetRouteData().Values["controller"];

            if (_ctlMapping == null) {
                //调用之前的方法拿到,key/value
                _ctlMapping = GetControllerMapping();
            }
           
            // /api/v1/person
            var matchVer = Regex.Match(request.RequestUri.PathAndQuery, @"/v(\d+)/");
            if (!matchVer.Success) {
                //我处理不了,让父类处理
                return base.SelectController(request);
            }
            string verNum = matchVer.Groups[1].Value;//2
            string key = controller + "v" + verNum;
            if (_ctlMapping.ContainsKey(key))
            {
                return _ctlMapping[key];
            }
            else {
                //我处理不了,让父类处理
                return base.SelectController(request);
            }
        }

    }
}

3.6-WebAPI中Filter-简单判断是否授权

(1)新建一个类。
探索ASP.NET Framework WebAPI的简介与应用
(2)类的代码如下:

namespace Demo.Filter
{
    public class MyAuthorFilter : IAuthorizationFilter
    {
        public bool AllowMultiple => true;

        public async Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
        {

            IEnumerable<string> userNames;
            if (!actionContext.Request.Headers.TryGetValues("UserName", out userNames)){
                //返回未授权状态码
                return new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
            };
            string userName = userNames.First();
            if (userName == "admin")
            {
                return await continuation();
            }
            else {
                //返回未授权状态码
                return new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
            }
        }

    }
}

(3)在【WebApiConfig.cs】的Register方法进行注册自定义的Filter。

//注册自己写的Filter
config.Filters.Add(new MyAuthorFilter());

3.7-WebAPI的异常处理

系统错误:
探索ASP.NET Framework WebAPI的简介与应用
业务错误:
探索ASP.NET Framework WebAPI的简介与应用

探索ASP.NET Framework WebAPI的简介与应用


3.8-接口的安全性问题

探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用
探索ASP.NET Framework WebAPI的简介与应用


3.9-JWT介绍

探索ASP.NET Framework WebAPI的简介与应用


3.10-接口安全传输

探索ASP.NET Framework WebAPI的简介与应用


原文链接:https://www.cnblogs.com/kimiliucn/p/17607795.html文章来源地址https://www.toymoban.com/news/detail-625894.html

到了这里,关于探索ASP.NET Framework WebAPI的简介与应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .net 温故知新【14】:Asp.Net Core WebAPI 缓存

    缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快。 从概念上讲,缓存是一种性能优化策略和设计考虑因素。 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性。 在最新的缓存控制规范文件RFC9111中,详细描述了浏览器缓存和

    2024年02月05日
    浏览(58)
  • Asp.net core Webapi 如何执行定时任务?

    在计算机系统中,定时执行一些后台任务是很常见的场景,比如定时发送邮件、备份数据等等。 那么,.NET 技术如何通过编程灵活地实现项目里复杂的自定义任务呢? 如果是 Windows 生态,通常来说,可以有这些方式: 编写一个程序,通过 Windows 内置的任务计划来定时执行。

    2024年02月04日
    浏览(46)
  • .net framework中webapi使用swagger进行接口文档展示

    第一步:在nuget程序包管理中搜索“Swashbuckle”包,然后进行安装(注:如果是.net core api请安装Sawshbuckle aspnetcore)。 第二步:打开项目App_Start文件夹,修改SwaggerConfig.cs配置文件 我这里仅仅是修改swagger文档的标题 第三步:创建主项目的xml注释文档: 右键项目→属性→生成→

    2024年02月07日
    浏览(38)
  • Asp.NET Core WebAPI 入门学习笔记,超详细

    WebAPI 是一种传统的方式,用于构建和暴露 RESTUI风格的Web服务。它提供了丰富的功能和灵活性,可以处理各种HTTP请求,并支持各种数据格式,如JSON、XML等。 WebAPI使用控制器(Controllers)和动作方法(ActionMethods)的概念、通过路由配置将请求映射到相应的方法上。 开发人员可以使用

    2024年04月24日
    浏览(71)
  • ASP.NET core WebApi Cors跨域解决

    我用了最新版的Asp.net webapi ,在csdn上面搜跨域如何解决的时候,发现csdn上面对于.NET技术讨论不是很多。没办法,只能面向官方文档和GitHub编程了。 前面两个已经放弃维护了,我们就不用了。用最新的webApi 我们引入了最新的api后可以在官方网址上查看文档(有些地址是gitH

    2024年04月29日
    浏览(53)
  • .net 温故知新【17】:Asp.Net Core WebAPI 中间件

    到这篇文章为止,关于.NET \\\"温故知新\\\"系列的基础知识就完结了,从这一系列的系统回顾和再学习,对于.NET core、ASP.NET CORE又有了一个新的认识。 不光是从使用,还包括这些知识点的原理,虽然深入原理谈不上,但对于日常使用也够了,我想的是知其然,知其所以然。 在实际

    2024年01月18日
    浏览(55)
  • ASP.NET Core SingleR Core:WebApi + .net 客户端开发

    我之前稍微研究了一下SignalR Core。用起来还行。简单来说SignalR就是用来解决实时通讯的问题的。 ASP.NET Core SingleR:初次体验和简单项目搭建 SignalR支持三种客户端,C#,Java,JavaScirpt。基本够用了。本身就是微软开发的,肯定支持自己的语言。因为是Websocket的上层封装,所以也要支

    2024年01月20日
    浏览(117)
  • asp.net core webapi如何执行周期性任务

    新建asp.net core webapi项目,使用Nuget搜索安装Quartz包。 注意:定时执行时间格式,参考连接:https://www.cnblogs.com/wudequn/p/8506938.html 在IIS中找到这个站点所用的程序池,点击“高级设置…” 在打开的列表中更改以下设置: 回收——固定时间间隔(分钟) 改为 0 ——虚拟/专用内存

    2024年02月13日
    浏览(46)
  • .net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍

    在Asp.Net Core 上面由于现在前后端分离已经是趋势,所以asp.net core MVC用的没有那么多,主要以WebApi作为学习目标。 我使用的是VS2022, .Net 7版本。 在创建界面有几项配置: 配置Https 启用Docker 使用控制器 启用OpenAPI支持 不使用顶级语句 其中配置Https 是WebApi是否使用https协议,启

    2024年02月07日
    浏览(42)
  • ASP.NET CORE WEBAPI 登录 JWT 鉴权 ,接口权限验证

    介绍 当今Web开发中,API的使用越来越广泛,而API的安全性也变得越来越重要。其中,JWT(JSON Web Token)鉴权和授权是一种常见的解决方案。 本篇文章将会介绍JWT鉴权和授权的原理、实现方式以及注意事项。 什么是JWT? JWT是一种基于JSON格式的开放标准(RFC7519),用于在网络

    2023年04月21日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包