我需要使用MVC创建自定义路由以构建自定义搜索:
默认主页索引的行动:
public virtual ActionResult Index()
{
return View();
}
我想读一个这样的字符串:
public virtual ActionResult Index(string name)
{
// call a service with the string name
return View();
}
对于以下网址:
www.company.com/name
问题是我有这两条路线,但它不起作用:
routes.MapRoute(
name: "Name",
url: "{name}",
defaults: new { controller = "Home", action = "Index", name = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", area = "", id = UrlParameter.Optional }
);
这样,除Home之外的任何控制器都被重定向到Home,如果我切换了订单,它就找不到Index Home Action。
答案 0 :(得分:0)
您可以使用属性路由。您可以查看有关包here的详细信息。安装属性路由包后。现在有一天它默认安装用于MVC5应用程序。更改您的操作方法如下:
[GET("{name}")]
public virtual ActionResult Index(string name)
{
// call a service with the string name
return View();
}
这是上面代码的一个问题: 路由器将发送没有名称的请求也发送到此操作方法。为避免这种情况,您可以按如下方式进行更改:
[GET("{name}")]
public virtual ActionResult Index2(string name)
{
// call a service with the string name
return View("Index");
}