AmbiguousActionException in the same controller

I tested Asp.NET Core in particular areas. Right now I ran into a problem when I get an exception if I add several views to the controller.

This is my exception:

An unhandled error occurred while processing the request.

AmbiguousActionException: several actions are performed. The following actions were consistent with route data and met all restrictions:

Forum.Areas.Admin.Controllers.AdminController.Index (Forum) Forum.Areas.Admin.Controllers.AdminController.Testing (Forum)

This is how I register a route:

  app.UseMvc(routes =>
  {
    routes.MapRoute("adminRoute", "Admin/{controller}/{action}/{id?}");

    routes.MapRoute(
      name: "default",
      template: "{controller=Home}/{action=Index}/{id?}");
  });

My controller:

namespace Forum.Areas.Admin.Controllers
{
  [Area("Admin")]
  [Route("admin")]
  public class AdminController : Controller
  {

    public IActionResult Index()
    {
      return View();
    }

    public IActionResult Testing()
    {
      return Content("Testing area!");
    }
  }
}

My project structure:

Project structure

Other similar questions seem to have ambiguous actions on different controllers, but in my case are these two different action names? Did I register the route incorrectly?

: , "2 " - , : (

!

+4
1

, Route AdminController, app.UseMvc() - delete [Route("admin")].

, app.UseMvc().

:

routes.MapRoute("adminRoute", "Admin/{controller}/{action}/{id?}");

:

routes.MapRoute("adminRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}");

controller action ( , ).

, Index(), url:

http://localhost:yourPortNumber/Admin

Admin (Admin Index ). .

. , , url - . .

Testing() url :

http://localhost:yourPortNumber/Admin/Admin/Testing

(Admin), (Admin) (Testing)

Index() ( ):

http://localhost:yourPortNumber/Admin/Admin/Index

http://localhost:yourPortNumber/Admin/Admin/AntoherActionName

, :

app.UseMvc(routes =>
{
  routes.MapRoute("adminRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}");

  routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}/{id?}");
});

:

[Area("Admin")]  
public class AdminController : Controller
{     
  public IActionResult Index()
  {
    return View();
  }

  public IActionResult Testing()
  {
    return Content("Testing area!");
  }
}

EDIT:

:

routes.MapRoute("adminRoute", "{area=Admin}/{controller=Admin}/{action=Index}/{id?}");

:

http://localhost:your_port_number/Admin/Admin/Index
+4

Source: https://habr.com/ru/post/1669803/


All Articles