Неожиданное поведение ASP.NET Core 3.0 для всех маршрутов - PullRequest
0 голосов
/ 28 октября 2019

Недавно я столкнулся с неожиданной проблемой

Я использую ASP.NET Core 3.0 и определил два маршрута в StartUp.cs

StartUp.cs

   app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "file",
            pattern: "{controller=File}/folder/{*path}",
            new { Action = "Folder" });

        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=File}/{action=Index}/{filename}");
    });

FileController.cs

public class FileController : Controller
{
    public IActionResult Folder(string path)
    {
        return Ok(path);
    }

    public IActionResult Index(string filename)
    {
        return Ok(filename);
    }
}

запрос к файлу / папке / abc / abc я ожидал совпадения с первым маршрутом, но результат был 404 не найден

, но если яизменен порядок маршрута

   app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=File}/{action=Index}/{filename}");

        endpoints.MapControllerRoute(
            name: "file",
            pattern: "{controller=File}/folder/{*path}",
            new { Action = "Folder" });
    });

Это работает!

Мой вопрос заключается в том, почему первая версия не работает, если я определил {controller = File} / folder / {* path} сверху

Я думал, что он будет последовательно проверять таблицу маршрутов

1 Ответ

0 голосов
/ 11 ноября 2019

Как правило, мы всегда ставим клиентские маршрутизаторы перед маршрутом по умолчанию. Для этой проблемы, если мы поставим не весь маршрут до маршрута по умолчанию, он будет работать как ожидалось. Тем не менее, если мы поставим «catch-all route» перед маршрутом по умолчанию, вы увидите, что не можете найти ни одной страницы, когда мы получаем доступ через файл / folder / abc / abc. Эта проблема не существует в Asp.net Core 3.0, но также в Asp.net Core 2.0 и MVC проекта. Если вам нужно использовать универсальные маршруты, лучше их поместить позже в маршрут talbe. Вы также можете прочитать эту статью для более подробной информации: Несколько маршрутов . Это поможет исправить неизвестные проблемы.

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