【发布时间】:2015-12-26 16:03:59
【问题描述】:
我在不同的命名空间中定义了两个具有相同控制器名称的控制器。并得到了一个例外。如何通过参数“dataTokens”来定义像mvc-4这样的控制器的命名空间?
以下例外:
AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:
Alice.Controllers.TestController.Index
Alice.Controllers.Api.TestController.Index
Microsoft.AspNet.Mvc.Infrastructure.DefaultActionSelector.SelectAsync(RouteContext context)
控制器/Api/TestController.cs :
namespace Alice.Controllers.Api
{
//[Route("api/[controller]")]
public class TestController : Controller
{
//[Route("[action]")]
public string Index()
{
return "this is controller at Alice.Controllers.Api"; ;
}
}
}
控制器/TestController.cs:
namespace Alice.Controllers
{
//[Route("[controller]")]
public class TestController : Controller
{
//[Route("[action]")]
public string Index()
{
return "this is controller at Alice.Controllers";
}
}
}
Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action}",
defaults: null,
constraints: null,
dataTokens: new { Namespaces = new[] { "Alice.Controllers" } });
routes.MapRoute(
name: "api",
template: "api/{controller}/{action}",
defaults: null,
constraints: null,
dataTokens: new { Namespaces = new[] { "Alice.Controllers.Api" } });
});
如果需要更多详细信息,请询问。
【问题讨论】:
-
我建议将 MVC 应用从 API 应用拆分为两个不同的程序集。
-
这只是一个演示。它也适用于“RouteAttribute”,但在 Mvc-4 中,我们可以使用命名空间定义路由。在 Mvc-6 中没有理由删除这个函数。@janhartmann
标签: c# asp.net asp.net-mvc asp.net-core asp.net-core-mvc