当前位置: 首页 > news >正文

电商网站开发源码公司搭建一个网站需要多少钱

电商网站开发源码,公司搭建一个网站需要多少钱,外贸流程英文,数字货币众筹网站开发前言由于现代互联网的飞速发展#xff0c;我们在开发现代 Web 应用程序中#xff0c;经常需要考虑多种类型的客户端访问服务的情况#xff1b;而这种情况放在15年前几乎是不可想象的#xff0c;在那个时代#xff0c;我们更多的是考虑怎么把网页快速友好的嵌套到服务代码中… 前言由于现代互联网的飞速发展我们在开发现代 Web 应用程序中经常需要考虑多种类型的客户端访问服务的情况而这种情况放在15年前几乎是不可想象的在那个时代我们更多的是考虑怎么把网页快速友好的嵌套到服务代码中经过服务器渲染后输出HTML到客户端没有 iOS没有 Android没有 UWP。更多的考虑是 防止 XSS在当时的环境下XSS一度成为各个站长的噩梦甚至网站开发的基本要求都要加上必须懂防 XSS 攻击。CORS 定义言归正传CORSCross-Origin Resource Sharing是由 W3C 指定的标准其目的是帮助在各个站点间的资源共享。CORS 不是一项安全标准启用 CORS 实际上是让站点放宽了安全标准通过配置 CORS可以允许配置中的请求源执行允许/拒绝的动作。在 .NETCore 中启用 CORS在 .NETCore 中已经为我们集成好 CORS 组件 Microsoft.AspNetCore.Cors在需要的时候引入该组件即可Microsoft.AspNetCore.Cors 的设计非常的简洁包括两大部分的内容看图从上图中我们可以看出左边是入口是我们常见的 AddCors/UseCors右边是 CORS 的核心配置和验证配置对象是 CorsPolicyBuilder 和 CorsPolicy验证入口为 CorsService中间件 CorsMiddleware 提供了拦截验证入口。CorsService 是整个 CORS 的核心实现客户端的请求流经中间件或者AOP组件后他们在内部调用 CorsService 的相关验证方法在 CorsService 内部使用配置好的 PolicyName 拉去相关策略进行请求验证最终返回验证结果到客户端。Microsoft.AspNetCore.Mvc.Cors通常情况下我们会在 Startup 类中的 ConfigureServices(IServiceCollection services) 方法内部调用 AddCors() 来启用 CROS 策略但是该 AddCors() 并不是上图中 CorsServiceCollectionExrensions 中的 AddCors 扩展方法。实际上在 ConfigureServices 中调用的 AddCors 是处于程序集 Microsoft.AspNetCore.Mvc.Cors 在 Microsoft.AspNetCore.Mvc.Cors 内部的扩展方法 AddCors() 中以 AOP 方式定义了对 EnableCorsAttribute/DisableCorsAttributeAttribute 的拦截检查。具体做法是在程序集 Microsoft.AspNetCore.Mvc.Cors 内部定义了类 CorsApplicationModelProvider 当我们调用 AddCors 扩展方法的时候将进一步调用 CorsApplicationModelProvider.OnProvidersExecuting(ApplicationModelProviderContext context) 方法从而执行检查 EnableCorsAttribute/DisableCorsAttributeAttribute 策略。所以我们在 ConfigureServices 中调用的 AddCore其实是在该程序集内部定义的类MvcCorsMvcCoreBuilderExtensions 的扩展方法我们看 MvcCorsMvcCoreBuilderExtensions 的定义public static class MvcCorsMvcCoreBuilderExtensions {public static IMvcCoreBuilder AddCors(this IMvcCoreBuilder builder){...AddCorsServices(builder.Services);...}public static IMvcCoreBuilder AddCors(this IMvcCoreBuilder builder,ActionCorsOptions setupAction){...AddCorsServices(builder.Services);...}public static IMvcCoreBuilder ConfigureCors(this IMvcCoreBuilder builder,ActionCorsOptions setupAction){...}// Internal for testing.internal static void AddCorsServices(IServiceCollection services){services.AddCors();services.TryAddEnumerable(ServiceDescriptor.TransientIApplicationModelProvider, CorsApplicationModelProvider());services.TryAddTransientCorsAuthorizationFilter, CorsAuthorizationFilter();} } 重点就在上面的 AddCorsServices(IServiceCollection services) 方法中 在方法中调用了 CORS 的扩展方法 AddCors()。那么我们就要问 CorsApplicationModelProvider 是在什么时候被初始化的呢答案是在 startup 中 ConfigureServices(IServiceCollection services) 方法内调用 services.AddControllers() 的时候。在AddControllers() 方法内部调用了 AddControllersCore 方法private static IMvcCoreBuilder AddControllersCore(IServiceCollection services) {// This method excludes all of the view-related services by default.return services.AddMvcCore().AddApiExplorer().AddAuthorization().AddCors().AddDataAnnotations().AddFormatterMappings(); } 理解了 CORS 的执行过程下面我们就可以开始了解应该怎么在 .NETCore 中使用 CORS 的策略了CORS 启用的三种方式在 .NETCore 中可以通过以下三种方式启用 CORS1、使用默认策略/命名策略的中间件的方式 2、终结点路由 命名策略 3、命名策略 EnableCorsAttribute通过上面的三种方式可以灵活在程序中控制请求源的走向但是残酷的事实告诉我们一般情况下我们都是会对全站进行 CORS。所以现实情况就是在大部分的 Web 应用程序中 CORS 已然成为皇帝的新装甚至有点累赘。CorsPolicyBuilderCORS策略通过上面的 CORS 思维导图我们已经大概了解了 CORS 的整个结构。由上图我们知道CorsPolicyBuilder 位于命名空间 Microsoft.AspNetCore.Cors.Infrastructure 中。在内部提供了两种基础控制策略全开/半开。这两种策略都提供了基本的方法供开发者直接调用非常的贴心。全开public CorsPolicyBuilder AllowAnyHeader(); public CorsPolicyBuilder AllowAnyMethod(); public CorsPolicyBuilder AllowAnyOrigin(); public CorsPolicyBuilder AllowCredentials(); 半开public CorsPolicyBuilder DisallowCredentials(); public CorsPolicyBuilder WithHeaders(params string[] headers); public CorsPolicyBuilder WithMethods(params string[] methods); public CorsPolicyBuilder WithOrigins(params string[] origins); 上面的策略定义从字面理解就可以知道其用途实际上呢他们的实现原理也是非常的简单。在 CorsPolicyBuilder 内部维护着一个 CorsPolicy 对象当你使用全开/半开方式配置策略的时候builder 会将配置写入内部 CorsPolicy 中存储备用。比如半开 WithOrigins(params string[] origins);,通过迭代器将配置的源写入 _policy.Origins 中。public CorsPolicyBuilder WithOrigins(params string[] origins) {foreach (var origin in origins){var normalizedOrigin GetNormalizedOrigin(origin);_policy.Origins.Add(normalizedOrigin);}return this; } 开始使用在理解了配置的过程后我们就可以进入真正的使用环节了通过上面的学习我们知道启用 CORS 有三种方式咱们一步一步来。使用默认策略/命名策略的中间件的方式所谓的命名策略就是给你的策略起个名字默认策略就是没有名字所有的入口都使用同一个策略下面的代码演示了命名策略private readonly string CORS_ALLOW_ORGINS cors_allow_orgins;public void ConfigureServices(IServiceCollection services) {services.AddCors(options {options.AddPolicy(CORS_ALLOW_ORGINS, policy {policy.WithOrigins(http://localhost:5500, http://localhost:8099);});});services.AddControllers().AddJsonOptions(options {options.JsonSerializerOptions.Converters.Add(new StringJsonConverter());}); }// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseCors(CORS_ALLOW_ORGINS);app.UseAuthorization();app.UseEndpoints(endpoints {endpoints.MapControllers();}); } 上面的代码演示了如何在站点中全局终结点启用 CORS首先声明了命名策略 corsalloworgins 然后将其用 AddCors() 添加到 CORS 中最后使用 UseCors() 启用该命名策略需要注意的是AddCors() 和 UseCors() 必须成对出现并且要使用同一个命名策略。终结点路由 命名策略.NETCore 支持通过对单个路由设置 CORS 命名策略从而可以实现在一个系统中对不同的业务提供个性化的支持。终结点路由 命名策略的配置和上面的命名策略基本相同仅仅是在配置路由的时候只需要对某个路由增加 RequireCors 的配置即可private readonly string CORS_ALLOW_ORGINS cors_allow_orgins; public void ConfigureServices(IServiceCollection services) {services.AddCors(options {options.AddPolicy(CORS_ALLOW_ORGINS, policy {policy.WithOrigins(http://localhost:5500, http://localhost:8099);});});services.AddControllers().AddJsonOptions(options {options.JsonSerializerOptions.Converters.Add(new StringJsonConverter());}); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseCors();app.UseAuthorization();app.UseEndpoints(endpoints {endpoints.MapControllerRoute(weatherforecast, {controllerWeatherForecast}/{actionGet}).RequireCors(CORS_ALLOW_ORGINS);// endpoints.MapControllers();}); } 上面的代码指定了路由 weatherforecast 需要执行 CORS 策略 CORSALLOWORGINS。通过调用 RequireCors() 方法传入策略名称完成 CORS 的配置。RequireCors 方法是在程序集 Microsoft.AspNetCore.Cors 内部的扩展方法具体是怎么启用策略的呢其实就是在内部给指定的终结点路由增加了 EnableCorsAttribute 这就是下面要说到的第三种启用 CORS 的方式。来看看 RequireCors() 内部的代码public static TBuilder RequireCorsTBuilder(this TBuilder builder, string policyName) where TBuilder : IEndpointConventionBuilder {if (builder null){throw new ArgumentNullException(nameof(builder));}builder.Add(endpointBuilder {endpointBuilder.Metadata.Add(new EnableCorsAttribute(policyName));});return builder; } 命名策略 EnableCorsAttribute最后一种启用 CORS 的方式是使用 EnableCorsAttribute 特性标记和 RequireCors 方法内部的实现不同的是这里说的 EnableCorsAttribute 是显式的指定到控制器上在应用 EnableCorsAttribute 的时候你可以应用到根控制器或者子控制器上如果是对根控制器进行标记被标记的根控制器和他的所有子控制器都将受指定 CORS 策略的影响反之如果只是对子控制器进行标记CORS 策略也只对当前控制器产生影响。CORS 的初始化public void ConfigureServices(IServiceCollection services) {services.AddCors(options {options.AddPolicy(controller_cors, policy {policy.WithOrigins(http://localhost:5500, http://localhost:8099);});options.AddPolicy(action_cors, policy {policy.WithOrigins(http://localhost:5500, http://localhost:8099);});});services.AddControllers().AddJsonOptions(options {options.JsonSerializerOptions.Converters.Add(new StringJsonConverter());}); }// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseRouting();app.UseCors();app.UseAuthorization();app.UseEndpoints(endpoints {endpoints.MapControllers();}); } 在上面的代码中因为 EnableCorsAttribute 可以应用到类和属性上所以我们定义了两个 CORS 策略分别是 controllercors 和 actioncors。接下来将这两种策略应用到 WeatherForecastController 上。应用 EnableCorsAttribute 特性标记[ApiController] [Route([controller])] [EnableCors(controller_cors)] public class WeatherForecastController : ControllerBase {[EnableCors(action_cors)][HttpPost]public string Users(){return Users;}[DisableCors][HttpGet]public string List(){return List;}[HttpGet]public string Index(){return Index;} } 在上面的 WeatherForecastController 控制器中我们将 controllercors 标记到控制器上将 actioncors 标记到 Action 名称为 Users 上面同时还对 List 应用了 DisableCors 表示对 List 禁用 CORS 的策略所以我们知道在 CORS 中有 AddCors/UseCors也有 EnableCors/DisableCors 都是成对出现的。其它策略我们还记得在 .NETCore 中一共有 4 种策略分别是Header、Method、Origin、Credentials但是本文仅演示了 WithOrigins 这一种方式相信通过这一种方式的演示对大家在启用其它策略的时候其思想也是一致的所谓的标头、请求方式、凭据 等等其基本法是不变的。通过对 Microsoft.AspNetCore.Cors 的内部实现的剖析我们了解到其实现 CORS 的原理非常简单结构清晰就算不用系统自带的 CORS 组件自行实现一个 CORS 策略也是非常容易的。参考资料(CORS) 启用跨域请求 ASP.NET CoreGitHubhttps://github.com/dotnet/aspnetcore/tree/master/src/Mvc/Mvc/src https://github.com/dotnet/aspnetcore/tree/master/src/Mvc/Mvc.Cors/src https://github.com/dotnet/aspnetcore/tree/master/src/Middleware/CORS/src
http://wiki.neutronadmin.com/news/233138/

相关文章:

  • 2000做网站贵么h5页面制作软件下载
  • 图片设计网站推荐济宁网站建设招聘
  • 郑州网站建设公司哪家专业好西安做网站的公司维护
  • 雄安 网站建设宁夏网站seo
  • 百度这个网站怎么做网站建设价格差异多少
  • 建筑英才网招聘信息珠海网站建设及优化
  • 淘宝联盟网站建设html5网站开发前景
  • 网站建设和连接器区公司名字python基础语法
  • 众筹平台网站建设企业管理系统有
  • 网站关键词长度郑州一建集团有限公司官网
  • 网站如何在手机端做适配大型门户网站建设大概多少钱
  • 做网站留言板需要什么条件网站建设编程时注意事项
  • 福建省高速公路建设管理网站自动生成网址的软件
  • 河南省做网站的公司晚上正能量免费下载软件安全
  • 网页设计网站名称网站建设实施过程
  • 建材行业门户网站源码谷城网站开发
  • 深圳地产网站制作公司怎么建网站数据库
  • 网站建设推荐网北京搬家公司哪一家最好
  • 阿里云这么建设网站wordpress企业 破解主题下载地址
  • 简单网站制作代码yy直播官网
  • 江门网站建设推荐建设部网站电子政务
  • 大庆建设大厦网站logo免费自动生成器app
  • 中英文的网站设计深圳10大劳务公司
  • 建立用模板建立网站郑州网站建设公司
  • 网站建设人员招聘常德市住房和城乡建设局网站
  • wordpress网站怎么加速vs2010做网站时间控件
  • 建设外贸网站多少钱上海企业招聘
  • 贵阳建设网站公司自己开个托管班需要什么手续
  • wordpress 架构设计闽侯seo
  • 遵义网站建设gzyhg赣州章贡区属于什么风险区