我正在开发一个 C# 项目,该项目基本上使用命令来执行某些操作。它使用 CommandLineParser用于解析所有这些命令和相应参数的库。
根据新的业务需求,我需要解析包含动词和参数的 URL。
是否有任何内置/简单的方法来解析 CommandLineParser 库中的 URL, 这将避免编写我在下面解释的自定义逻辑 方法?
这是我解决这一挑战的方法:
将 URL 隐藏为命令,然后使用 CommandLine 解析器为选项属性分配值。
例如
网址:
https://localhost:9000/Open?appId=123&appName=paint&uId=511a3434-37e0-4600-ab09-65728ac4d8fe
实现:
将 URL 隐藏到命令的自定义逻辑
open -appId 123 -name paint -uid 511a3434-37e0-4600-ab09-65728ac4d8fe
然后将其传递给
parser.ParseArguments
这是类结构
[Verb("open", HelpText = "Open an application")] public class OpenOptions { [Option("id", "appId", Required = false, HelpText = "Application Id")] public int ApplicationId{ get; set; } [Option("name", "appName", Required = false, HelpText = "Application Name")] public string ApplicationName{ get; set; } [Option("uId", "userId", Required = true, HelpText = "User Id")] public Guid UserId{ get; set; } }
最佳答案
没有开箱即用的解决方案。通常 HttpUtility
类(引用 Get URL parameters from a string in .NET )可以做到这一点。
这是第一种方法:
var url = "https://localhost:9000/Open?appId=123&appName=paint&uId=511a3434-37e0-4600-ab09-65728ac4d8fe";
Uri uri = new Uri(url);
var @params = HttpUtility.ParseQueryString(uri.Query);
string? appId = @params.Get("appId");
Console.WriteLine(appId);
将返回 123,等等以及其他参数。
返回的值将是一个string
类型。您最终可以使用 Guid.TryParse
解析您的 Guid
对象,并使用 int.TryParse
获取 int
值。
关于C#:CommandLineParser 如何解析URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75444331/