asp.netcore,aspnet core和aspnet区别
ASP.net core是什么?
ASP.NET
Core
是一个全新的开源、跨平台框架,可以用它来构建基于网络连接的现代云应用程序,比如:Web
应用,IoT(Internet
Of
Things,物联网)应用和移动后端等。ASP.NET
Core可以运行在
.NET
Core
或完整的
.NET
Framework
之上,其架构为发布到云端或本地运行的应用提供了一个最佳的开发框架,由开销很小的模块化组件构成,这就保持了你构造解决方案的灵活性。你可以跨平台地在Windows、Mac和Linux等设备上开发和运行你的
ASP.NET
Core
应用。
ASP.NET
Core有以下优势:
ASP.NET
Core相对于之前的版本有许多变化,才使得它成为一个更加灵活和模块化的框架。ASP.NET
Core不再是基于System.Web.dll,它基于一组分解在NuGet的包。这使您可以根据实际需要来判断是否引用相应的Nuget包,可以优化您的应用程序。表面积更小的应用程序的好处包括安全更强、维修更少,提高性能,降低成本。
最新版本的
ASP.NET
叫做
ASP.NET
Core
(也被称为
ASP.NET
5)
它颠覆了过去的
ASP.NET。
asp.netcore控制器是怎么调用的
1. 计算机管理-
服务和应用程序-Internet信息服务-网站-默认网站-属性 2. 主目录-应用程序配置-调试 3. 启用ASP服务器脚本调试 (2)在需要中断调试的ASP脚本行里添加一行stop (3)在浏览器里访问该脚本,由于iis在解析脚本时遇到stop命令就会中断抛出异常, 此时会弹出窗口要求你选择调试器可选择visual studio 2008/2005,然后提示附加到dllhost进程,选择附加, 则visual studio就会弹出窗口显示代码,光标断点显示在stop语句行,这时便可以开始单步调试了。
Asp.netCore3.0 WebApi从0到1手摸手教你写【1】简单的webapi接口
Visual Studio 2019
.net core 3.0
具体步骤如下图:
此处我们选择API(新手不推荐选择空项目,选择API系统会为我们自动创建WebApi需要的一些配置文件等),Https配置这一项我们暂时不勾选,目前我们不配置Https。
F5运行项目,然后就可以看到微软为我们写好的一个天气预报示例webapi了,这里只有一个Get请求示例,返回值为json格式。
注意: services.AddControllers(); 和 endpoints.MapControllers(); 方法成对出现, 这是.net core3.0中的最新写法
ConfigureServices方法
用来向容器中注册服务,注册好的服务可以在其他地方进行调用.
Configure方法
用来配置中间件管道,即如何响应http请求.
1 右键删除系统默认创建的 WeatherForecastController.cs 和 WeatherForecast.cs
2 新建一个控制器,命名: UserController.cs
问题来了,为啥直接给打开 weatherforecast ,而且还404了,别急,往下看。
(┬_┬)怎么还是404?别急继续往下看
上面增加 action 虽然能达到想要的结果,但是每次新建一个 Controller 都有写个 action 万一要是忘记了又要忙乎半天,有没有一劳永逸的办法呢?
继续往下看:
1.首先去掉Controller里的 Route 和 ApiController
2.修改 Startup.cs ,增加路由模版:
今天就到这里,后期继续完善我们的webapi。
asp.netcoreiis部署后,jquery获取json
asp.netcoreiis部署后,jquery获取json的方法如下。
1、在Ajax请求中设置参数:dataType:json。
2、获取通过回调函数返回的数据并解析得到我们想要的值,看源码。
3、通常情况下,你可以从后台返回JSON数据,前台就交给jQuery。
ASP.NET Core认证原理和实现
通常在应用程序中,安全分为前后两个步骤:验证和授权。验证负责检查当前请求者的身份,而授权则根据上一步得到的身份决定当前请求者是否能够访问期望的资源。
既然安全从验证开始,我们也就从验证开始介绍安全。
我们先从比较简单的场景开始考虑,例如在 Web API 开发中,需要验证请求方是否提供了安全令牌,安全令牌是否有效。如果无效,那么 API 端应该拒绝提供服务。在命名空间 Microsoft.AspNetCore.Authentication 下,定义关于验证的核心接口。对应的程序集是 Microsoft.AspNetCore.Authentication.Abstractions.dll。
在 ASP.NET 下,验证中包含 3 个基本操作:
验证操作负责基于当前请求的上下文,使用来自请求中的信息,例如请求头、Cookie 等等来构造用户标识。构建的结果是一个 AuthenticateResult 对象,它指示了验证是否成功,如果成功的话,用户标识将可以在验证票据中找到。
常见的验证包括:
在授权管理阶段,如果用户没有得到验证,但所期望访问的资源要求必须得到验证的时候,授权服务会发出质询。例如,当匿名用户访问受限资源的时候,或者当用户点击登录链接的时候。授权服务会通过质询来相应用户。
例如
质询操作应该让用户知道应该使用何种验证机制来访问请求的资源。
在授权管理阶段,如果用户已经通过了验证,但是对于其访问的资源并没有得到许可,此时会使用拒绝操作。
例如:
拒绝访问处理应该让用户知道:
在这个场景下,可以看到,验证需要提供的基本功能就包括了验证和验证失败后的拒绝服务两个操作。在 ASP.NET Core 中,验证被称为 Authenticate,拒绝被称为 Forbid。 在供消费者访问的网站上,如果我们希望在验证失败后,不是像 API 一样直接返回一个错误页面,而是将用户导航到登录页面,那么,就还需要增加一个操作,这个操作的本质是希望用户再次提供安全凭据,在 ASP.NET Core 中,这个操作被称为 Challenge。这 3 个操作结合在一起,就是验证最基本的要求,以接口形式表示,就是 IAuthenticationHandler 接口,如下所示:
验证的结果是一个 AuthenticateResult 对象。值得注意的是,它还提供了一个静态方法 NoResult() 用来返回没有得到结果,静态方法 Fail() 生成一个表示验证异常的结果,而 Success() 成功则需要提供验证票据。
通过验证之后,会返回一个包含了请求者票据的验证结果。
在 GitHub 中查看 AuthenticateResult 源码
那么验证的信息来自哪里呢?除了前面介绍的 3 个操作之外,还要求一个初始化的操作 Initialize,通过这个方法来提供当前请求的上下文信息。
在 GitHub 中查看 IAuthenticationHandler 定义
有的时候,我们还希望提供登出操作,增加登出操作的接口被称为 IAuthenticationSignOutHandler。
在 GitHub 中查看 IAuthenticationSignOutHandler 源码
在登出的基础上,如果还希望提供登录操作,那么就是 IAuthenticationSignInHandler 接口。
在 GitHub 中查看 IAuthenticationSignInHandler 源码
直接实现接口还是比较麻烦的,在命名空间 Microsoft.AspNetCore.Authentication 下,微软提供了抽象基类 AuthenticationHandler 以方便验证控制器的开发,其它控制器可以从该控制器派生,以取得其提供的服务。
通过类的定义可以看到,它使用了泛型。每个控制器应该有一个对应该控制器的配置选项,通过泛型来指定验证处理器所使用的配置类型,在构造函数中,可以看到它被用于获取对应的配置选项对象。
在 GitHub 中查看 AuthenticationHandler 源码
通过 InitializeAsync(),验证处理器可以获得当前请求的上下文对象 HttpContext。
最终,作为抽象类的 ,希望派生类来完成这个验证任务,抽象方法 HandleAuthenticateAsync() 提供了扩展点。
验证的结果是一个 AuthenticateResult。
而拒绝服务则简单的多,直接在这个抽象基类中提供了默认实现。直接返回 HTTP 403。
剩下的一个也一样,提供了默认实现。直接返回 HTTP 401 响应。
对于 JWT 来说,并不涉及到登入和登出,所以它需要从实现 IAuthenticationHandler 接口的抽象基类 AuthenticationHandler 派生出来即可。从 AuthenticationHandler 派生出来的 JwtBearerHandler 实现基于自己的配置选项 JwtBearerOptions。所以该类定义就变得如下所示,而构造函数显然配合了抽象基类的要求。
在 GitHub 中查看 JwtBearerHandler 源码
真正的验证则在 HandleAuthenticateAsync() 中实现。下面的代码是不是就很熟悉了,从请求头中获取附带的 JWT 访问令牌,然后验证该令牌的有效性,核心代码如下所示。
在 GitHub 中查看 JwtBearerHandler 源码
在 ASP.NET Core 中,你可以使用各种验证处理器,并不仅仅只能使用一个,验证控制器需要一个名称,它被看作该验证模式 Schema 的名称。Jwt 验证模式的默认名称就是 "Bearer",通过字符串常量 JwtBearerDefaults.AuthenticationScheme 定义。
在 GitHub 中查看 JwtBearerDefaults 源码
最终通过 AuthenticationBuilder 的扩展方法 AddJwtBearer() 将 Jwt 验证控制器注册到依赖注入的容器中。
在 GitHub 中查看 JwtBearerExtensions 扩展方法源码
一种验证处理器,加上对应的验证配置选项,我们再为它起一个名字,组合起来就成为一种验证架构 Schema。在 ASP.NET Core 中,可以注册多种验证架构。例如,授权策略可以使用架构的名称来指定所使用的验证架构来使用特定的验证方式。在配置验证的时候,通常设置默认的验证架构。当没有指定验证架构的时候,就会使用默认架构进行处理。
还可以
注册的验证模式,最终变成 AuthenticationScheme,注册到依赖注入服务中。
在 GitHub 中查看 AuthenticationScheme 源码
各种验证架构被保存到一个 IAuthenticationSchemeProvider 中。
在 GitHub 中查看 IAuthenticationSchemeProvider 源码
最终的使用是通过 IAuthenticationHandlerProvider 来实现的,通过一个验证模式的字符串名称,可以取得所对应的验证控制器。
在 GitHub 中查看 IAuthenticationHandlerProvider 源码
它的默认实现是 AuthenticationHandlerProvider,源码并不复杂。
在 GitHub 中查看 AuthenticationHandlerProvider 源码
验证中间件的处理就没有那么复杂了。
找到默认的验证模式,使用默认验证模式的名称取得对应的验证处理器,如果验证成功的话,把当前请求用户的主体放到当前请求上下文的 User 上。
里面还有一段特别的代码,用来找出哪些验证处理器实现了 IAuthenticationHandlerProvider,并依次调用它们,看看是否需要提取终止请求处理过程。
在 GitHub 中查看 AuthenticationMiddle 源码
asp.netcore和phothy好用吗
asp.netcore和phothy好用,asp.netcore是一个免费且开放源代码的Web框架,以及由微软和社区开发的下一代ASP.NET。phothy言的基本语法,使用缩进表示代码块,同一代码块的语句必须包含相同的缩进空格数,操作简单方便。所以,asp.netcore和phothy好用。