单一动作的路线混乱
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,例如 window
和 id
,但每当我尝试访问它(例如 https://localhost/Explorer/Import/window/helloWorld
或 https://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 }
);
}
我显然无法理解这里的路线或试图实现这是不可能的。
我的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,例如 window
和 id
,但每当我尝试访问它(例如 https://localhost/Explorer/Import/window/helloWorld
或 https://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 }
);
}