我正在定义我的应用程序 URL,例如
domainname.com/storecontroller/storeaction/storename
我想重写
domainname.com/storecontroller/storename
实际上,我需要从 url 中跳过 storeaction,我不想用带有“?”的查询字符串来做。无论如何通过注册路由配置路径或任何其他方式来做到这一点?
我正在定义我的应用程序 URL,例如
domainname.com/storecontroller/storeaction/storename
我想重写
domainname.com/storecontroller/storename
实际上,我需要从 url 中跳过 storeaction,我不想用带有“?”的查询字符串来做。无论如何通过注册路由配置路径或任何其他方式来做到这一点?
是的。您可以将 action 定义为默认参数,并仅匹配具有 Regex 约束的特定控制器:
routes.MapRoute("<route name>", "{controller}/{storename}",
new
{
action = "storeaction"
},
new
{
controller = "somecontroller1|somecontroller2|somecontroller3",
});
(动作将始终具有默认值“storeaction”)
请注意,您需要在默认通用路由之前定义此路由,以便在此启动之前它不会捕获它。
使用 属性路由
[RoutePrefix("Home")]
public ActionResult HomeController : Controller
{
[Route("{storeName}")]
public ActionResult ProcessStore(string storeName)
{
// to do : Return something
}
public ActionResult Index()
{
// to do : Return something
}
}
[RoutePrefix("Payment")]
public ActionResult PaymentController : Controller
{
[Route("{storeName}")]
public ActionResult ProcessStore(string storeName)
{
// to do : Return something
}
}