Browse Source

Apewer-6.0.3:修正 GetParameter 问题。

dev
Elivo 5 years ago
parent
commit
20281f62da
  1. 2
      Apewer.Run/Apewer.Run.csproj
  2. 2
      Apewer.Run/ApiClient.cs
  3. 2
      Apewer.Run/Methods.cs
  4. 81
      Apewer.Run/Web.cs
  5. 2
      Apewer/Apewer.csproj
  6. 21
      Apewer/NetworkUtility.cs
  7. 82
      Apewer/Web/WebUtility.cs
  8. 3
      Apewer/_ChangeLog.md

2
Apewer.Run/Apewer.Run.csproj

@ -9,7 +9,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Apewer.Library\Apewer.csproj" />
<ProjectReference Include="..\Apewer\Apewer.csproj" />
</ItemGroup>
</Project>

2
Apewer.Run/ApiClient.cs

@ -15,7 +15,7 @@ namespace Apewer.Run
public ApiClient()
{
var client = new Web.ApiClient();
var client = new Apewer.Web.ApiClient();
client.ApiUrl = "http://agent.niutax.com/";
client.UserAgent = Assembly.GetExecutingAssembly().FullName;

2
Apewer.Run/Methods.cs

@ -12,7 +12,7 @@ namespace Apewer.Run
public Methods()
{
FormatMinutes();
// FormatMinutes();
}
void FormatMinutes()

81
Apewer.Run/Web.cs

@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Apewer.Run
{
public class Web
{
public Web()
{
// GetParameter(Json.Parse("{\"status\":2,\"after\":0,\"before\":0}"), "status");
}
string GetParameter(Json data, params string[] names)
{
if (names == null || names.Length < 1) return null;
var sameNames = new List<string>();
var lowerNames = new List<string>();
foreach (var name in names)
{
if (string.IsNullOrEmpty(name)) continue;
sameNames.Add(name);
var lower = TextUtility.ToLower(name);
if (string.IsNullOrEmpty(lower)) continue;
lowerNames.Add(lower);
}
// POST 优先。
if (data != null && data.IsObject)
{
var properties = data.GetProperties();
if (properties != null)
{
// Json 区分大小写,先全字匹配。
foreach (var property in properties)
{
if (!property.IsProperty) continue;
if (sameNames.Contains(property.Name) && property.Value != null)
{
var value = property.Value;
if (value == null) continue;
var text = value.ToString();
if (!string.IsNullOrEmpty(text)) return text;
}
}
// 以小写模糊匹配。
foreach (var property in properties)
{
if (!property.IsProperty) continue;
var lowerName = TextUtility.ToLower(property.Name);
if (lowerNames.Contains(lowerName) && property.Value != null)
{
var value = property.Value;
if (value == null) continue;
var text = value.ToString();
if (!string.IsNullOrEmpty(text)) return text;
}
}
}
}
#if NETFX
// NETFX 最后搜索 GET 参数。
if (request.Url != null)
{
var value = GetParameter(request.Url, names);
if (!string.IsNullOrEmpty(value)) return value;
}
#endif
return null;
}
}
}

2
Apewer/Apewer.csproj

@ -14,7 +14,7 @@
<TargetFrameworks>netstandard2.1;net20;net40;net461;netcoreapp3.1</TargetFrameworks>
<Title>Apewer</Title>
<Product>Apewer Libraries</Product>
<Version>6.0.2</Version>
<Version>6.0.3</Version>
</PropertyGroup>
<!-- Info -->

21
Apewer/NetworkUtility.cs

@ -182,24 +182,23 @@ namespace Apewer
/// <summary>判断 IPv4 地址格式是否正确。</summary>
public static bool IsIP(string ipv4)
{
int r = 0;
try
{
if (!string.IsNullOrEmpty(ipv4))
{
var a = ipv4.Split('.');
if (a.Length == 4)
{
if (string.IsNullOrEmpty(ipv4)) return false;
var split = ipv4.Split('.');
if (split.Length != 4) return false;
for (int i = 0; i < 4; i++)
{
int n = Convert.ToInt32(a[i]);
if ((n >= 0) && (n <= 255)) r += 1;
}
}
var n = Convert.ToInt32(split[i]);
if (n < 0 || n > 255) return false;
if (n.ToString() != split[i]) return false;
}
return true;
}
catch { }
return (r == 4) ? true : false;
return false;
}
/// <summary>对目标地址进行解析。</summary>

82
Apewer/Web/WebUtility.cs

@ -113,6 +113,14 @@ namespace Apewer.Web
#region http
/// <summary>获取直连端的 IP。</summary>
public static string GetDirectIP(ApiRequest request)
{
if (request == null) return null;
if (request.Context == null) return null;
return GetDirectIP(request.Context.Request);
}
/// <summary>获取直连端的 IP。</summary>
public static string GetDirectIP(HttpRequest request)
{
@ -125,6 +133,14 @@ namespace Apewer.Web
#endif
}
/// <summary>获取客户端 IP。</summary>
public static string GetClientIP(ApiRequest request, bool withProxy = false)
{
if (request == null) return null;
if (request.Context == null) return null;
return GetClientIP(request.Context.Request, withProxy);
}
/// <summary>获取客户端 IP。</summary>
#if NETFX
public static string GetClientIP(System.Web.HttpRequest request, bool withProxy = false)
@ -147,7 +163,7 @@ namespace Apewer.Web
}
/// <summary>请求来自于可信客户端。</summary>
public static bool FromTrusted(HttpRequest request, params string[] domains)
public static bool FromTrusted(HttpRequest request, params string[] addresses)
{
if (request == null) return false;
@ -158,17 +174,26 @@ namespace Apewer.Web
if (NetworkUtility.FromLAN(direct)) return true;
}
if (domains != null && domains.Length > 0)
// 遍历传入的地址。
if (addresses != null && addresses.Length > 0)
{
// 读取 HTTP 头。
var forwarded = GetForwardedIP(request);
if (!string.IsNullOrEmpty(forwarded))
if (!NetworkUtility.IsIP(forwarded)) return false;
foreach (var address in addresses)
{
if (NetworkUtility.IsIP(address))
{
foreach (var domain in domains)
if (forwarded == address) return true;
}
else
{
if (string.IsNullOrEmpty(domain)) continue;
if (domain == forwarded) return true;
var ip = NetworkUtility.Resolve(domain);
if (NetworkUtility.IsIP(ip) && ip == forwarded) return true;
var ip = NetworkUtility.Resolve(address);
if (NetworkUtility.IsIP(ip))
{
if (forwarded == ip) return true;
}
}
}
}
@ -177,17 +202,17 @@ namespace Apewer.Web
}
/// <summary>请求来自于可信客户端。</summary>
public static bool FromTrusted(HttpContext context, params string[] domains)
public static bool FromTrusted(HttpContext context, params string[] addresses)
{
if (context == null) return false;
return FromTrusted(context.Request, domains);
return FromTrusted(context.Request, addresses);
}
/// <summary>请求来自于可信客户端。</summary>
public static bool FromTrusted(ApiRequest request, params string[] domains)
public static bool FromTrusted(ApiRequest request, params string[] addresses)
{
if (request == null) return false;
return FromTrusted(request.Context, domains);
return FromTrusted(request.Context, addresses);
}
/// <summary>获取 HTTP 方法。</summary>
@ -287,6 +312,13 @@ namespace Apewer.Web
return value;
}
/// <summary>获取 X-Forwarded-For。</summary>
public static string GetForwardedIP(ApiRequest request)
{
if (request == null) return null;
return GetForwardedIP(request.Headers);
}
/// <summary>获取 X-Forwarded-For。</summary>
public static string GetForwardedIP(HttpRequest request) => GetForwardedIP(GetHeaders(request));
@ -373,11 +405,11 @@ namespace Apewer.Web
foreach (var name in names)
{
if (string.IsNullOrEmpty(name)) continue;
sameNames.Add(name);
if (!sameNames.Contains(name)) sameNames.Add(name);
var lower = TextUtility.ToLower(name);
if (string.IsNullOrEmpty(lower)) continue;
lowerNames.Add(lower);
if (!lowerNames.Contains(lower)) lowerNames.Add(lower);
}
// POST 优先。
@ -423,14 +455,24 @@ namespace Apewer.Web
if (!string.IsNullOrEmpty(value)) return value;
}
#if NETFX
// NETFX 最后搜索 GET 参数。
if (request.Url != null)
// GET 参数。
if (request.Parameters != null)
{
var value = GetParameter(request.Url, names);
if (!string.IsNullOrEmpty(value)) return value;
// 全字匹配。
foreach (var kvp in request.Parameters)
{
if (string.IsNullOrEmpty(kvp.Key) || string.IsNullOrEmpty(kvp.Value)) continue;
if (sameNames.Contains(kvp.Key)) return kvp.Value;
}
// 以小写模糊匹配。
foreach (var kvp in request.Parameters)
{
var lowerKey = TextUtility.ToLower(kvp.Key);
if (string.IsNullOrEmpty(lowerKey) || string.IsNullOrEmpty(kvp.Value)) continue;
if (lowerNames.Contains(lowerKey)) return kvp.Value;
}
}
#endif
return null;
}

3
Apewer/_ChangeLog.md

@ -5,6 +5,9 @@
### 最新提交
### 6.0.3
- 修正 GetParameter 获取不到 GET 参数的问题。
### 6.0.2
- 修正 GetParameter 匹配 Json 的问题。

Loading…
Cancel
Save