0

也许我不明白如何正确使用UriTemplate

我总是想搜索传入的网址

api/whatever      // that is it 

如果 URL 如下所示,我只想得到 api/CheckMainVerified 所以我想如果不使用 UriTemplate,我想子字符串检查或正则表达式会起作用吗?

http://localhost:29001/api/CheckMainVerified/223128

这就是我正在做的

var url = "http://localhost:29001/api/CheckMainVerified/223128";


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

var apiTemplate = new UriTemplate("{api}/{*params}", true);

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

var finalSearch = match.BoundVariables["api"];
string parameters = match.BoundVariables["params"];

finalSearch.Dump();
parameters.Dump();
match.Dump();
4

1 回答 1

0

我认为您只是缺少模板中的第二个选项(请参见下面的示例)。

var template = new UriTemplate("{api}/{controller}/{*params}", true);
var fullUri = new Uri("http://localhost:29001/api/CheckMainVerified/223128");
var prefix = new Uri("http://localhost:29001");
var results = template.Match(prefix, fullUri);

if (results != null)
{
    foreach (string item in results.BoundVariables.Keys)
    {
        Console.WriteLine($"Key: {item}, Value: {results.BoundVariables[item]}");
        // PRODUCES:
        // Key: API, Value: api
        // Key: CONTROLLER, Value: CheckMainVerified
        // Key: PARAMS, Value: 223128
    }

    Console.WriteLine($"{results.BoundVariables["api"]}/{results.BoundVariables["controller"]}");
    // PRODUCES:
    // api/CheckMainVerified
}

因此,将“{controller}”添加到模板应该可以解决您的问题。从那里,您可以进行简单的字符串比较。IE

if ($"{results.BoundVariables["api"]}/{results.BoundVariables["controller"]}" == "api/CheckMainVerified") { ... }

或者,正如您所建议的那样;您可以使用子字符串或正则表达式解决方案。

于 2017-03-15T02:14:01.253 回答