首先,我需要说我在我的项目中使用T4MVC。我有两种方法的方法:
public virtual ActionResult List(string slug, string category, String selectedFilters)
路线:
routes.MapRoute("ProductOnSale", "products/{slug}/{category}/onsale", MVC.Product.List());
routes.MapRoute("ProudctsList", "products/{slug}/{category}/{selectedFilters}", MVC.Product.List()
.AddRouteValue("selectedFilters", ""));
如您所见,两条路线只有一个ActionResult
。他们有不同的网址。第一条路线的示例:
products/living-room-furniture/sofas/sectional-sofa
第二条路线的例子:
products/living-room-furniture/living-room-tables/onsale
这篇文章应该说我来自另一页。我需要将布尔参数添加到我的方法List(string slug, string category, String selectedFilters, bool onsale)
中,并依赖于此选择路由。是否可以使用约束?在这种情况下,愿任何人提供一个如何做到的例子吗?
答案 0 :(得分:0)
我不确定我是否理解你的问题。我遇到的两个案例可能对你有帮助。
案例1:根据用于访问页面的URL重定向到另一个URL。
步骤1:创建MVCRouteHandler
公共类LandingPageRouteHandler:MvcRouteHandler { protected override IHttpHandler GetHttpHandler(RequestContext Context) { if(Context.HttpContext.Request.Url.DnsSafeHost.ToLower()。包含(“abc”)) { Context.RouteData.Values [“controller”] =“LandingPage”; Context.RouteData.Values [“action”] =“索引”; Context.RouteData.Values [“id”] =“abc”; } return base.GetHttpHandler(Context); } }
第2步:添加RouteHandler
routes.MapRoute(
name: "Landingpage",
url: "Landingpage/{id}/{*dummy}",
defaults: new { controller = "Landingpage", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
).RouteHandler = new LandingPageRouteHandler();
案例2:根据使用的URL添加属性到控制器和视图
我的案例中的所有控件都派生自BaseController类。在BaseController中我有:
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
//Set TenantByDomain
var DnsSafeHost = filterContext.HttpContext.Request.Url.DnsSafeHost;
int? TenantByDomain = null;
if (db.Tenants.Any(x => x.DnsDomains.Contains(DnsSafeHost)))
{
TenantByDomain = db.Tenants.First(x => x.DnsDomains.Contains(DnsSafeHost)).Id;
}
((BaseController)(filterContext.Controller)).TenantByDomain = TenantByDomain;
filterContext.Controller.ViewBag.TenantByDomain = TenantByDomain;
}
适用于您的问题。 使用路由处理程序,您可以添加一个额外的属性,指示所采用的原始路由并将其重定向到第3个URL(!用户没有看到这个新URL)。
在OnActionExecuting中使用额外的routevalue执行某些操作,以便可以根据需要进行处理。