提问者:小点点

ASP.NET Core和ExtCore.MVC库中存在“AmbiguousMatchException:请求匹配多个endpoint”错误


我正在使用extcore.mvc库,当我在两个不同的扩展中有两个具有相同名称的控制器时会出现问题。 下面是我的代码:

扩展性a:

public class UseEndpointsAction : IUseEndpointsAction
{
    public int Priority => 1000;

    public void Execute(IEndpointRouteBuilder endpointRouteBuilder, IServiceProvider serviceProvider)
    {
        endpointRouteBuilder.MapControllerRoute(
            name: "ExtensionA",
            pattern: "ExtensionA",
            defaults: new { controller = "Default", action = "Index" });
    }
}

扩展名B:

public class UseEndpointsAction : IUseEndpointsAction
{
    public int Priority => 1000;

    public void Execute(IEndpointRouteBuilder endpointRouteBuilder, IServiceProvider serviceProvider)
    {
        endpointRouteBuilder.MapControllerRoute(
            name: "ExtensionB",
            pattern: "ExtensionB",
            defaults: new { controller = "Default", action = "Index" });
    }
}

有两个控制器,分别为“extensiona.controllers.DefaultController”和“extensionb.controllers.DefaultController”。

当客户端请求以下URL:“http://{domain}/extensiona”时,它会收到以下错误:

处理请求时发生未处理的异常。 AmbiguousMatchException:请求匹配了多个终结点。 匹配:ExtensionA.Controllers.DefaultController.Index(ExtensionA)ExtensionB.Controllers.DefaultController.Index(ExtensionB)

我想使用命名空间来解决它,这意味着将每条路由解析到一个特定的命名空间。 我在网上搜索,我阅读了所有的MSDN文档,但一无所获。 如有任何帮助,我们将不胜感激。

谢谢


共1个答案

匿名用户

将控制器重命名(并将controller=“Default”)分别改为DefaultControllerADefaultControllerB

也可以使用区域。

或者尝试实现某种NamespaceConstraintAttribute,就像这里所做的那样。