ASP. NET Core 3.1, обработка нескольких параметров маршрута - PullRequest
0 голосов
/ 03 августа 2020

У меня есть небольшой API, обслуживающий файлы. Запрошенный файл поступает из нашего приложения ClickOnce. Вместо нескольких действий GET, которые будут go в запрошенной папке / файле, возможно ли иметь одно действие GET, из которого я могу получить все параметры маршрута, чтобы я мог построить свой относительный путь.

Пример GET маршруты

/api/ApplicationFiles
/api/ApplicationFiles/somefile
/api/ApplicationFiles/someFolder/somefile
/api/ApplicationFiles/someFolder/someFolder/someFolder/someFile

Поэтому мне нужно определить несколько GET конечных точек.

Ответы [ 2 ]

3 голосов
/ 03 августа 2020

Вы можете использовать звездочку, чтобы указать, что ваш параметр маршрута может содержать косые черты. Это называется универсальным параметром и выглядит так:

[Route("/api/ApplicationFiles/{**path}")]
public IActionResult GetFile(string path)
{
    // code
}

Из документации:

Вы можете использовать звездочку (*) или двойная звездочка (**) в качестве префикса параметра маршрута для привязки к остальной части URI. Это так называемые универсальные параметры. Например, blog/{**slug} соответствует любому URI, который начинается с /blog и имеет любое значение после него, которое присваивается значению маршрута заголовка. Параметры перехвата всех адресов также могут соответствовать пустой строке.

Параметр перехвата всех адресов экранирует соответствующие символы, когда маршрут используется для генерации URL-адреса, включая символы разделителя пути (/). Например, маршрут foo/{*path} со значениями маршрута { path = "my/path" } генерирует foo/my%2Fpath. Обратите внимание на экранированный прямой sla sh. Чтобы передать символы-разделители путей туда и обратно, используйте префикс параметра маршрута **. Маршрут foo/{**path} с { path = "my/path" } генерирует foo/my/path.

0 голосов
/ 03 августа 2020

Можно определить несколько атрибутов маршрута для одного метода контроллера. Взгляните на этот пример: https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1#attribute -routing-for-rest-apis

[Route("~/api/ApplicationFiles")]
[Route("~/api/ApplicationFiles/{somefile}")]
[Route("~/api/ApplicationFiles/{someFolder}/{somefile}")]
[Route("~/api/ApplicationFiles/{someFolder}/{someFolder2}/{someFolder3}/{somefile}")]

где somefile, someFolder, someFolder2 и someFolder3 строковые параметры вашего метода контроллера

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