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."
您可以使用 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."