Browse Source

版本限制

AddValidOverTime
shanji 2 years ago
parent
commit
05efc14c11
  1. 60
      BBWY.Server.API/Middlewares/ClientVersionValidationMiddleWare.cs
  2. 6
      BBWY.Server.API/Startup.cs
  3. 38
      BBWY.Server.API/appsettings.json
  4. 8
      BBWY.Server.Model/GlobalConfig.cs

60
BBWY.Server.API/Middlewares/ClientVersionValidationMiddleWare.cs

@ -0,0 +1,60 @@
using BBWY.Common.Models;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace BBWY.Server.API.Middlewares
{
public class ClientVersionValidationMiddleWare
{
/// <summary>
/// 管道请求委托
/// </summary>
private RequestDelegate _next;
private IDictionary<string, int> apiVersionDictionary;
private IOptionsMonitor<List<ClientVersionValidationModel>> _monitor;
public ClientVersionValidationMiddleWare(RequestDelegate requestDelegate, IOptionsMonitor<List<ClientVersionValidationModel>> monitor)
{
_next = requestDelegate;
_monitor = monitor;
apiVersionDictionary = new Dictionary<string, int>();
}
public async Task Invoke(HttpContext context)
{
try
{
Console.WriteLine(context.Request.Path);
var apiRequirement = _monitor.CurrentValue.FirstOrDefault(x => x.Api.Equals(context.Request.Path, StringComparison.CurrentCultureIgnoreCase));
if (apiRequirement != null)
{
if (!context.Request.Headers.TryGetValue("ClientVersion", out StringValues clientVersionStr))
throw new BusinessException("未读取到ClientVersion");
if (!int.TryParse(clientVersionStr, out int clientVersion))
throw new BusinessException("非法ClientVersion");
if (clientVersion < apiRequirement.MinimumVersion)
throw new BusinessException("当前ClientVersion低于接口最低要求,请升级到最新版");
}
await _next(context); //调用管道执行下一个中间件
}
catch
{
throw;
}
}
}
public class ClientVersionValidationModel
{
public string Api { get; set; }
public int MinimumVersion { get; set; }
}
}

6
BBWY.Server.API/Startup.cs

@ -15,6 +15,8 @@ using Microsoft.OpenApi.Models;
using Newtonsoft.Json.Serialization;
using QuanTan.SDK.Client;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Reflection;
@ -88,9 +90,9 @@ namespace BBWY.Server.API
#region ×¢²áȭ̽SDKÏà¹ØÀà
services.AddSingleton<QuanTanProductClient>();
#endregion
//var stores = Configuration.GetSection("Stores").Get<IList<Store>>();
services.Configure<GlobalConfig>(Configuration.GetSection("GlobalSetting"));
services.Configure<List<ClientVersionValidationModel>>(Configuration.GetSection("ApiVersionRequirements"));
services.AddMapper(new MappingProfiles());
services.AddSwaggerGen(c =>
@ -181,6 +183,8 @@ namespace BBWY.Server.API
app.UseCors("cors");
app.UseMiddleware<ClientVersionValidationMiddleWare>();
app.UseAuthorization();
app.UseEndpoints(endpoints =>

38
BBWY.Server.API/appsettings.json

@ -20,34 +20,18 @@
"Platform": 1, //
"APIHost": "https://yunding.qiyue666.com/"
}
],
"Stores": [
{
"StoreId": "110007637",
"StoreName": "上海商超B母婴玩具仓2号仓库"
},
{
"StoreId": "800006819",
"StoreName": "泉州惠安齐越云仓1号库"
},
{
"StoreId": "110023168",
"StoreName": "广州亚一综合B仓6号库"
},
{
"StoreId": "110008191",
"StoreName": "广州公共平台仓4号库"
},
{
"StoreId": "110017918",
"StoreName": "北京公共平台仓26号库"
},
{
"StoreId": "110013947",
"StoreName": "西安亚一3CA仓2号库"
}
]
},
"AllowedSwagger": true,
"Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0"
"Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0",
"ApiVersionRequirements": [
{
"Api": "/api/batchpurchase/previeworder",
"MinimumVersion": 10109
},
{
"Api": "/api/batchpurchase/batchcreateorder",
"MinimumVersion": 10109
}
]
}

8
BBWY.Server.Model/GlobalConfig.cs

@ -10,7 +10,6 @@ namespace BBWY.Server.Model
public IList<PlatformSetting> PlatformAPIs { get; set; }
public IList<StoreSetting> Stores { get; set; }
}
public class PlatformSetting
@ -19,11 +18,4 @@ namespace BBWY.Server.Model
public string APIHost { get; set; }
}
public class StoreSetting
{
public string StoreId { get; set; }
public string StoreName { get; set; }
}
}

Loading…
Cancel
Save