核心 3.1 ASP.NET 中的 ASP 操作不适用于终结点路由



我创建了一个具有两个操作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时,我会得到一个异常:

处理请求时发生未处理的异常。不明确的MatchException:请求与多个终结点匹配。

匹配:

UrlAndRoutes.Controllers.HomeController.Index(UrlAndRoutes(
UrlAndRoutes.Controllers.HomeController.CustomVariable(UrlAndroutes(

但它适用于属性路由

我能够重现您的问题。您的模式无效,因为使用";执行{action}";无法与HomeController中的任何操作匹配,因此为了保留您想要的模式,我建议改为执行以下操作:

endpoints.MapControllerRoute(
name: "NewRoute",
pattern: "App/Do/{action}",
defaults: new { controller = "Home" });

我测试你的代码,并删除以下代码,它可以工作:

endpoints.MapControllerRoute(
name:"NewRoute",
pattern: "App/Do{action}",
defaults: new {Controller="Home"}
);

或者您可以将其更改为:

endpoints.MapControllerRoute(
name:"NewRoute",
pattern: "Home/{action}",
defaults: new {Controller="Home"}
);

或者您可以使用href="ControllerName/ActionName";而不是asp操作,@Url.action

相关内容

最新更新