asp.net-core - ASP.NET Core 3.1 中的 asp-action 不适用于端点路由
问题描述
我创建了一个具有两个动作 Index 和 CustomVariable 的控制器
public class HomeController: Controller
{
public IActionResult Index()
{
return View("Result", new Result { Controller = nameof(HomeController), Action = nameof(Index) });
}
public ViewResult CustomVariable(string id)
{
Result r = new Result { Controller = nameof(HomeController), Action = nameof(CustomVariable) };
r.Data["id"] = /*RouteData.Values["id"];*/ id ?? "<noValue>";
r.Data["catchall"] = RouteData.Values["catchall"];
return View("Result", r);
}
}
并创建了一个显示结果的视图:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width"/>
<title>Routing </title>
<link rel=" stylesheet" asp-href-include="lib/bootstrap/dist/css/*.min.css"/>
</head>
<body class="panel-body">
<table class="table table-bordered ">
<tr><th>Controlle:</th><td>@Model.Controller</td></tr>
<tr><th>Action:</th><td>@Model.Action</td></tr>
@foreach (string key in Model.Data.Keys)
{
<tr><th>@key :</th><td>@Model.Data[key]</td></tr>
}
</table>
<a asp-action="CustomVariable">this is an outgoing URL</a>
</body>
</html>
在Startup
我定义了两个端点,如下所示:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name:"NewRoute",
pattern: "App/Do{action}",
defaults: new {Controller="Home"}
);
endpoints.MapControllerRoute(
name: "default",
pattern :"{controller=Home}/{action=Index}/{id?}";
});
当我单击 URL 时,出现异常:
处理请求时发生未处理的异常。AmbiguousMatchException:请求匹配多个端点。
火柴:
UrlsAndRoutes.Controllers.HomeController.Index (UrlsAndRoutes)
UrlsAndRoutes.Controllers.HomeController.CustomVariable (UrlsAndRoutes)
但它适用于属性路由
解决方案
我能够重现您的问题。您的模式无效,因为使用“Do{action}”无法与中的任何操作匹配,HomeController
以便保留您想要的模式,我建议改为执行以下操作:
endpoints.MapControllerRoute(
name: "NewRoute",
pattern: "App/Do/{action}",
defaults: new { controller = "Home" });
推荐阅读
- reactjs - 如何管理多个下拉菜单的状态
- javascript - 在 React 组件中重置值
- visual-studio - VS Xamarin 无法生成 IPA 文件
- c# - 生成一个类的所有对象的列表
- python - 为什么我在使用 Celery 时必须使用 pip 而不是 Poetry 重新安装依赖项
- tensorflow - 无法从 tf hub 将模型转换为 tensorflowjs
- mqtt - 对多个 MQTT 客户端使用单个安全令牌的问题
- docusignapi - 如果您发送的收件人多于模板角色,则从模板创建信封不会出错
- ios - 如何在地图上显示基于图像的注释视图
- python - 我如何在列表理解中同时使用 If-else 和 for 循环