单一动作的路线混乱

Route Confusion with Single Action

我显然无法理解这里的路线或试图实现这是不可能的。

我的RouteConfig里有这个:

 routes.MapRoute(
     name: "Explorer",
     url: "{controller}/{action}/{prefix}/{value}",
      defaults: new { controller = "Explorer", action = "Index", prefix ="", value = UrlParameter.Optional }
             );

Explorer 控制器中我有以下内容:

[RoutePrefix("Explorer")]
public class ExplorerController : Controller
{        
    public ActionResult Index()
    {
        return View();
    }

    [Route("id/{value}")]
    public ActionResult Import(decimal? importId)
    {
        return View();
    }

    [Route("text/{value}")]
    public ActionResult Import(string importWindow)
    {
        return View();
    }
}

其中一个 ACTION(导入)具有不同的 PREFIX,例如 windowid,但每当我尝试访问它(例如 https://localhost/Explorer/Import/window/helloWorldhttps://localhost/Explorer/Import/id/200)它一直给我以下错误

The current request for action 'Import' on controller type 'ExplorerController' is ambiguous between the following action methods: System.Web.Mvc.ActionResult Import(System.Nullable`1[System.Decimal]) on type projectname.Controllers.ExplorerController System.Web.Mvc.ActionResult Import(System.String) on type projectname.Controllers.ExplorerController

我知道它有歧义,但我有一个前缀可以使它明确。

我在这里做错了什么,如果这不是正确的方法,如何实现这个结果?

为控制器中的操作方法应用 [Route()] 属性 class:

[RoutePrefix("Explorer")]
public class ExplorerController : Controller
{
    // GET: Explorer
    public ActionResult Index()
    {
        return View();
    }

    // Example: https://localhost/Explorer/Import/id/200

    [Route("Import/id/{importId:decimal}")]
    public ActionResult Import(decimal? importId)
    {
        return View();
    }

    // Example: https://localhost/Explorer/Import/window/helloWorld

    [Route("Import/{text}/{importWindow}")]
    public ActionResult Import(string importWindow)
    {
        return View();
    }
}

RegisterRoutes()方法中只定义Default路由:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}