summaryrefslogtreecommitdiff
path: root/src/SMAPI.Web/Framework/VersionConstraint.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-02-01 16:21:35 -0500
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-02-01 16:21:35 -0500
commitc8d627cdf2ae3126584ec2500877ff19987db17f (patch)
tree2cc6f604df00027239476acf3a74ae6bb0761323 /src/SMAPI.Web/Framework/VersionConstraint.cs
parentf976b5c0f095a881fc20f6ce5dcf5a50ebb2b5da (diff)
parent17a9193fd28c527dcba40360702adb277736cc45 (diff)
downloadSMAPI-c8d627cdf2ae3126584ec2500877ff19987db17f.tar.gz
SMAPI-c8d627cdf2ae3126584ec2500877ff19987db17f.tar.bz2
SMAPI-c8d627cdf2ae3126584ec2500877ff19987db17f.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI.Web/Framework/VersionConstraint.cs')
-rw-r--r--src/SMAPI.Web/Framework/VersionConstraint.cs28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/SMAPI.Web/Framework/VersionConstraint.cs b/src/SMAPI.Web/Framework/VersionConstraint.cs
index 2d6ec603..72f5ef84 100644
--- a/src/SMAPI.Web/Framework/VersionConstraint.cs
+++ b/src/SMAPI.Web/Framework/VersionConstraint.cs
@@ -1,16 +1,34 @@
-using Microsoft.AspNetCore.Routing.Constraints;
+using System;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Routing;
using StardewModdingAPI.Toolkit;
namespace StardewModdingAPI.Web.Framework
{
/// <summary>Constrains a route value to a valid semantic version.</summary>
- internal class VersionConstraint : RegexRouteConstraint
+ internal class VersionConstraint : IRouteConstraint
{
/*********
** Public methods
*********/
- /// <summary>Construct an instance.</summary>
- public VersionConstraint()
- : base(SemanticVersion.Regex) { }
+ /// <summary>Get whether the URL parameter contains a valid value for this constraint.</summary>
+ /// <param name="httpContext">An object that encapsulates information about the HTTP request.</param>
+ /// <param name="route">The router that this constraint belongs to.</param>
+ /// <param name="routeKey">The name of the parameter that is being checked.</param>
+ /// <param name="values">A dictionary that contains the parameters for the URL.</param>
+ /// <param name="routeDirection">An object that indicates whether the constraint check is being performed when an incoming request is being handled or when a URL is being generated.</param>
+ /// <returns><c>true</c> if the URL parameter contains a valid value; otherwise, <c>false</c>.</returns>
+ public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
+ {
+ if (routeKey == null)
+ throw new ArgumentNullException(nameof(routeKey));
+ if (values == null)
+ throw new ArgumentNullException(nameof(values));
+
+ return
+ values.TryGetValue(routeKey, out object routeValue)
+ && routeValue is string routeStr
+ && SemanticVersion.TryParseNonStandard(routeStr, out _);
+ }
}
}