URL MVC C# 中的路由
URL Routing in MVC C#
我正在定义我的应用程序 URL,例如
domainname.com/storecontroller/storeaction/storename
我想改写成
domainname.com/storecontroller/storename
实际上,我需要跳过 url 中的存储操作,我不想使用带有“?”的查询字符串来完成它。有没有办法通过注册路由配置路径或任何其他方式来做到这一点?
是的。您可以将操作定义为默认参数,并仅匹配具有 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
}
}
我正在定义我的应用程序 URL,例如
domainname.com/storecontroller/storeaction/storename
我想改写成
domainname.com/storecontroller/storename
实际上,我需要跳过 url 中的存储操作,我不想使用带有“?”的查询字符串来完成它。有没有办法通过注册路由配置路径或任何其他方式来做到这一点?
是的。您可以将操作定义为默认参数,并仅匹配具有 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
}
}