我将路由定义为
routes.MapRoute(
"Company", // Route name
"Company/{companyname}", // URL with parameters
new { controller = "Company", action = "CompanyDetail", companyname = UrlParameter.Optional } // Parameter defaults
);
现在的问题是,如果我现在向公司控制器提出任何请求并将参数传递给CompanyDetail
方法,我已经做出了这个路由,但在一个条件下,我不想发送给这个方法,我想将控制发送给另一个动作CallCompany
。如何解决这个问题并注意我还需要运行这两种类型的请求。
您可以在控制器方法中设置它:
public ActionResult CompanyDetail(string companyname)
{
if (condition)
{
return RedirectToAction("ActionName", new { companyname = companyname});
}
return View();
}
我理解了你的问题,你想实现以下行为:
有一组公司名称(例如,"test"),它们与URL 相对应
您的主机/公司/测试
它们应该被路由到呼叫公司。
其他URL(如yourhost/Company/aother_Company)应路由到CompanyDetail。
我认为,最好的方法是在CompanyDetail方法中进行重定向
public ActionResult CallCompany(string companyname)
{
return View();
}
public ActionResult CompanyDetail(string companyname)
{
IEnumerable<string> myCompanies = GetSpecialCompany();
if (myCompanies.Contains(companyname))
{
return RedirectToAction("CallCompany", new { companyname = companyname });
}
return View();
}
private IEnumerable<string> GetSpecialCompany()
{
throw new NotImplementedException();
}
您应该研究一下mvc路由约束。这将使您能够将类似url上的请求转发到不同的操作,这取决于您可以通过程序设置的不同参数
例如
routes.MapRoute(
"Product",
"Product/{productId}",
new {controller="Product", action="Details"},
new {productId = @"d+" }
);
这只会进入控制器:产品id中的产品和操作详细信息是int
在您的情况下,您必须在regex中定义模式,对于该模式,请求应该转到一个路由,并将第二个路由放在该路由旁边
因此,不符合该路由约束的每个请求将自动由下一个请求处理。