Недавно я столкнулся с неожиданной проблемой
Я использую 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} сверху
Я думал, что он будет последовательно проверять таблицу маршрутов