diff --git a/DnsServerCore/Extensions.cs b/DnsServerCore/Extensions.cs
index 4b4cbc12..9bd1b403 100644
--- a/DnsServerCore/Extensions.cs
+++ b/DnsServerCore/Extensions.cs
@@ -18,7 +18,9 @@ along with this program. If not, see .
*/
using DnsServerCore.Auth;
+using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Routing;
using System;
using System.Net;
using System.Text.Json;
@@ -28,14 +30,17 @@ namespace DnsServerCore
{
static class Extensions
{
+ readonly static string[] HTTP_METHODS = new string[] { "GET", "POST" };
+
public static IPEndPoint GetRemoteEndPoint(this HttpContext context)
{
try
{
- if (context.Connection.RemoteIpAddress is null)
+ IPAddress remoteIP = context.Connection.RemoteIpAddress;
+ if (remoteIP is null)
return new IPEndPoint(IPAddress.Any, 0);
- if (NetUtilities.IsPrivateIP(context.Connection.RemoteIpAddress))
+ if (NetUtilities.IsPrivateIP(remoteIP))
{
string xRealIp = context.Request.Headers["X-Real-IP"];
if (IPAddress.TryParse(xRealIp, out IPAddress address))
@@ -45,7 +50,7 @@ namespace DnsServerCore
}
}
- return new IPEndPoint(context.Connection.RemoteIpAddress, context.Connection.RemotePort);
+ return new IPEndPoint(remoteIP, context.Connection.RemotePort);
}
catch
{
@@ -69,72 +74,91 @@ namespace DnsServerCore
throw new InvalidOperationException();
}
- public static string GetQuery(this HttpRequest request, string parameter)
+ public static IEndpointConventionBuilder MapGetAndPost(this IEndpointRouteBuilder endpoints, string pattern, RequestDelegate requestDelegate)
+ {
+ return endpoints.MapMethods(pattern, HTTP_METHODS, requestDelegate);
+ }
+
+ public static IEndpointConventionBuilder MapGetAndPost(this IEndpointRouteBuilder endpoints, string pattern, Delegate handler)
+ {
+ return endpoints.MapMethods(pattern, HTTP_METHODS, handler);
+ }
+
+ public static string QueryOrForm(this HttpRequest request, string parameter)
{
string value = request.Query[parameter];
+ if ((value is null) && request.HasFormContentType)
+ value = request.Form[parameter];
+
+ return value;
+ }
+
+ public static string GetQueryOrForm(this HttpRequest request, string parameter)
+ {
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
throw new DnsWebServiceException("Parameter '" + parameter + "' missing.");
return value;
}
- public static string GetQuery(this HttpRequest request, string parameter, string defaultValue)
+ public static string GetQueryOrForm(this HttpRequest request, string parameter, string defaultValue)
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
return defaultValue;
return value;
}
- public static T GetQuery(this HttpRequest request, string parameter, Func parse)
+ public static T GetQueryOrForm(this HttpRequest request, string parameter, Func parse)
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
throw new DnsWebServiceException("Parameter '" + parameter + "' missing.");
return parse(value);
}
- public static T GetQuery(this HttpRequest request, string parameter) where T : struct
+ public static T GetQueryOrForm(this HttpRequest request, string parameter) where T : struct
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
throw new DnsWebServiceException("Parameter '" + parameter + "' missing.");
return Enum.Parse(value, true);
}
- public static T GetQuery(this HttpRequest request, string parameter, Func parse, T defaultValue)
+ public static T GetQueryOrForm(this HttpRequest request, string parameter, Func parse, T defaultValue)
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
return defaultValue;
return parse(value);
}
- public static T GetQuery(this HttpRequest request, string parameter, T defaultValue) where T : struct
+ public static T GetQueryOrForm(this HttpRequest request, string parameter, T defaultValue) where T : struct
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
return defaultValue;
return Enum.Parse(value, true);
}
- public static bool TryGetQuery(this HttpRequest request, string parameter, out string value)
+ public static bool TryGetQueryOrForm(this HttpRequest request, string parameter, out string value)
{
- value = request.Query[parameter];
+ value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
return false;
return true;
}
- public static bool TryGetQuery(this HttpRequest request, string parameter, Func parse, out T value)
+ public static bool TryGetQueryOrForm(this HttpRequest request, string parameter, Func parse, out T value)
{
- string strValue = request.Query[parameter];
+ string strValue = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(strValue))
{
value = default;
@@ -145,9 +169,9 @@ namespace DnsServerCore
return true;
}
- public static bool TryGetQuery(this HttpRequest request, string parameter, out T value) where T : struct
+ public static bool TryGetQueryOrForm(this HttpRequest request, string parameter, out T value) where T : struct
{
- string strValue = request.Query[parameter];
+ string strValue = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(strValue))
{
value = default;
@@ -157,12 +181,12 @@ namespace DnsServerCore
return Enum.TryParse(strValue, true, out value);
}
- public static string GetQueryAlt(this HttpRequest request, string parameter, string alternateParameter)
+ public static string GetQueryOrFormAlt(this HttpRequest request, string parameter, string alternateParameter)
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
{
- value = request.Query[alternateParameter];
+ value = request.QueryOrForm(alternateParameter);
if (string.IsNullOrEmpty(value))
throw new DnsWebServiceException("Parameter '" + parameter + "' missing.");
}
@@ -170,12 +194,12 @@ namespace DnsServerCore
return value;
}
- public static string GetQueryAlt(this HttpRequest request, string parameter, string alternateParameter, string defaultValue)
+ public static string GetQueryOrFormAlt(this HttpRequest request, string parameter, string alternateParameter, string defaultValue)
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
{
- value = request.Query[alternateParameter];
+ value = request.QueryOrForm(alternateParameter);
if (string.IsNullOrEmpty(value))
return defaultValue;
}
@@ -183,12 +207,12 @@ namespace DnsServerCore
return value;
}
- public static T GetQueryAlt(this HttpRequest request, string parameter, string alternateParameter, Func parse)
+ public static T GetQueryOrFormAlt(this HttpRequest request, string parameter, string alternateParameter, Func parse)
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
{
- value = request.Query[alternateParameter];
+ value = request.QueryOrForm(alternateParameter);
if (string.IsNullOrEmpty(value))
throw new DnsWebServiceException("Parameter '" + parameter + "' missing.");
}
@@ -196,12 +220,12 @@ namespace DnsServerCore
return parse(value);
}
- public static T GetQueryAlt(this HttpRequest request, string parameter, string alternateParameter, Func parse, T defaultValue)
+ public static T GetQueryOrFormAlt(this HttpRequest request, string parameter, string alternateParameter, Func parse, T defaultValue)
{
- string value = request.Query[parameter];
+ string value = request.QueryOrForm(parameter);
if (string.IsNullOrEmpty(value))
{
- value = request.Query[alternateParameter];
+ value = request.QueryOrForm(alternateParameter);
if (string.IsNullOrEmpty(value))
return defaultValue;
}