diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-09-25 17:39:51 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-09-25 17:39:51 -0400 |
commit | 6dff9779a349945d502dee67d5d4dd8e63b4f753 (patch) | |
tree | 7621f85a392329cb0a782355feff252b6d34e2d6 /src/StardewModdingAPI.Web/Controllers | |
parent | b105c97dda01441d503d31e8b8ac0b3fd35fef14 (diff) | |
download | SMAPI-6dff9779a349945d502dee67d5d4dd8e63b4f753.tar.gz SMAPI-6dff9779a349945d502dee67d5d4dd8e63b4f753.tar.bz2 SMAPI-6dff9779a349945d502dee67d5d4dd8e63b4f753.zip |
use POST for SMAPI update checks to avoid issues with long queries (#336)
Diffstat (limited to 'src/StardewModdingAPI.Web/Controllers')
-rw-r--r-- | src/StardewModdingAPI.Web/Controllers/ModsController.cs | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/StardewModdingAPI.Web/Controllers/ModsController.cs b/src/StardewModdingAPI.Web/Controllers/ModsController.cs index 566577e4..f29de45a 100644 --- a/src/StardewModdingAPI.Web/Controllers/ModsController.cs +++ b/src/StardewModdingAPI.Web/Controllers/ModsController.cs @@ -14,6 +14,7 @@ namespace StardewModdingAPI.Web.Controllers { /// <summary>Provides an API to perform mod update checks.</summary> [Produces("application/json")] + [Route("api/{version:semanticVersion}/[controller]")] internal class ModsController : Controller { /********* @@ -80,15 +81,27 @@ namespace StardewModdingAPI.Web.Controllers [HttpGet] public async Task<IDictionary<string, ModInfoModel>> GetAsync(string modKeys) { + string[] modKeysArray = modKeys?.Split(',').Select(p => p.Trim()).ToArray(); + if (modKeysArray == null || !modKeysArray.Any()) + return new Dictionary<string, ModInfoModel>(); + + return await this.PostAsync(new ModSearchModel(modKeysArray)); + } + + /// <summary>Fetch version metadata for the given mods.</summary> + /// <param name="search">The mod search criteria.</param> + [HttpPost] + public async Task<IDictionary<string, ModInfoModel>> PostAsync([FromBody] ModSearchModel search) + { // sort & filter keys - string[] modKeysArray = (modKeys?.Split(',').Select(p => p.Trim()).ToArray() ?? new string[0]) + string[] modKeys = (search?.ModKeys?.ToArray() ?? new string[0]) .Distinct(StringComparer.CurrentCultureIgnoreCase) .OrderBy(p => p, StringComparer.CurrentCultureIgnoreCase) .ToArray(); // fetch mod info IDictionary<string, ModInfoModel> result = new Dictionary<string, ModInfoModel>(StringComparer.CurrentCultureIgnoreCase); - foreach (string modKey in modKeysArray) + foreach (string modKey in modKeys) { // parse mod key if (!this.TryParseModKey(modKey, out string vendorKey, out string modID)) |