.net core Сопоставление с образцом RouteData - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь сопоставить маршрут, используя объект routedata, который возвращается из метода HttpContext.GetRouteData () в ядре asp.net.

Если существует конечная точка 'http://localhost/dogs/breed', каков наилучший способ проверить, что данные маршрута в текущем httpcontext соответствуют этой конечной точке?

В качестве примера самый простойбыло бы так:

var matches = string.Equals((string) routeData.Values["controller"], "dog",
                       StringComparison.OrdinalIgnoreCase)
                   && string.Equals((string)routeData.Values["action"], "breed", 
                       StringComparison.OrdinalIgnoreCase);

Мне кажется, это довольно нелегко, есть ли лучший способ проверить эти данные, чтобы соответствовать шаблону в текущем контексте?

Спасибо

1 Ответ

0 голосов
/ 28 сентября 2018

Возможно, это более элегантно:

var actual = HttpContext.GetRouteData().Values;

var expected = new RouteValueDictionary {
    { "action", "Breed" },
    { "controller", "Dogs" },
};

return !expected.Except(actual).Any();

Это будет соответствовать маршрутам к контроллеру Dogs и его действию Breed.

Мы также можем получить тип безопасности:

var actual = HttpContext.GetRouteData().Values;
var expected = new RouteValueDictionary 
{
    {
        "action", nameof(ValuesController.Get) 
    },
    {
        "controller", nameof(ValuesController)
            // remove the "Controller" suffix
            .Remove(nameof(ValuesController).Length - nameof(Controller).Length)
    },
};

return !expected.Except(actual).Any();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...