C# .net UriTemplate 匹配来自白名单或池或服务器的 url

C# .net UriTemplate match url from a whitelist or pool or servers

您可以使用 UriTemplate 来解析 url:

我有这段代码,在 localhost:29001 本地我将主机设置为特定的 Uri 然后我检查它是否是 Match

在我的真实代码中,我确实有行

var absoluteUri = HttpContext.Current.Request.Url.AbsoluteUri;

其中的用法是这样的

var match = apiTemplate.Match(host, new Uri(absoluteUri));

但本质上这就是代码在 C# 中的样子 运行。

var host = new Uri("http://localhost:29001");
var apiTemplate = new UriTemplate("{api}/{*params}", true);

var match = apiTemplate.Match(host, new Uri("http://localhost:29001/GetQAByDateTime/date/2-15-2017/time/11"));
if (match == null)
    throw new ArgumentException();

Console.WriteLine(match.BoundVariables["api"]);     // GetQAByDateTime
Console.WriteLine(match.BoundVariables["params"]);  // date/2-15-2017/time/11

所以基本上我不想hardcode host

  var host = new Uri("http://localhost:29001");

当然,我可以从 HttpContext 中获取服务器名称,但这有什么意义呢?我不应该检查像

这样的池或服务器吗?
localhost
localhost:290001
https://myserver.com
https://myStagingServer/website
etc..

我怎样才能在这些池中进行匹配?

您可以直接从HttpContext.Current.Request.Url中提取主机:

var uri = HttpContext.Current.Request.Url;
var host = new Uri(uri.Scheme + "://" + x.Authority);

编辑:我应该补充说 Uri.Host 被避免了,因为 "Unlike the Authority property, this property value does not include the port number."