- 此问题在此处已有答案**:
(17个答案)
2天前关闭。
我正在做一个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; }
}
3条答案
按热度按时间blpfk2vs1#
没有现成的解决方案,通常
HttpUtility
类(ref Get URL parameters from a string in .NET)就可以解决这个问题。下面是第一种方法:
将返回123,其他参数也是如此。
返回的值将是
string
类型。您最终可以使用Guid.TryParse
来解析Guid
对象,使用int.TryParse
来解析int
值。qojgxg4l2#
CommandLineParser不是为解析URI而设计的,但是使用
Uri
类和Linq,这是相当容易的:首先解析一个允许使用Segments属性的URI,然后使用
&
拆分查询,最后使用=
拆分键/值对创建一个字典。由于
query
是Dictionary
,因此您可以简单地访问各个查询参数,例如:其打印:
动词="打开"
应用程序ID ="123",应用程序名称="油漆",用户ID ="511a3434 - 37e0 - 4600-ab09 - 65728ac4d8fe"
query.Dump(verb);
来可视化结果:7cwmlq893#