Как использовать регулярное выражение для соответствия части URL в части маршрута?WebAPI .NET core 2.2 - PullRequest
0 голосов
/ 22 апреля 2019

Я сейчас пытаюсь написать приложение WebApi.В части маршрута (контроллере) я хочу использовать регулярное выражение для соответствия части URL.Однако, похоже, что "/" не может быть хорошо распознано.

Например, api url равен "api/books/science/list".Я хочу получить "api/books/science" и "list".Я пробовал следующее регулярное выражение [HttpGet("{url=.*}/list")].Но, похоже, регулярное выражение не работает.".*" не может соответствовать "\".

API разработан как "api/*{path}/list".Для *{path} он может иметь несколько структур, таких как books/science или books/art/Asia'.Я хочу использовать регулярное выражение для сопоставления с ними, а затем их можно использовать для следующих операций.

На самом деле, я попробовал другой метод, чтобы получить URL [HttpGet("{**url}")].Но я полагаю, что это не очень хорошее решение, потому что тогда мне нужно разобрать URL.

1 Ответ

0 голосов
/ 22 апреля 2019

Regex поддерживается через параметр :regex().Информацию см. В разделе Маршрутизация в документации ASP.NET Core по Regex и, например, Промежуточное ПО маршрутизации .

Попробуйте: [HttpGet("{url:regex(.*)}/list")] Как вы указали, это не такработать, потому что он работает на токенизированном значении URL-адреса маршрута.

Одной альтернативой является использование универсальной маршрутизации (в Startup.cs):

routes.MapRoute(
    name: "therest",
    template: "/{**url}",
    defaults: new { controller = "Home", action="Index"} // Send to /home/index
);

Или, если вы знаете, что будетограниченное количество элементов пути, вы можете просто включить их все:

[HttpGet("/{url1}")]
[HttpGet("/{url1}/{url2}")]
[HttpGet("/{url1}/{url2}/{url3}")]
[HttpGet("/{url1}/{url2}/{url3}/{url4}")]
public IActionResult Test(string url1 = null, string url2 = null, string url3 = null, string url4 = null)
{
    var url = string.Join("/", url1, url2, url3, url4);
    //... return View();
}

Я полагаю, что альтернативой является написание некоторого дополнительного кода маршрутизации в промежуточном программном обеспечении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...