使用MVC直接进行自定义搜索

时间:2014-05-12 16:07:37

标签: c# asp.net-mvc asp.net-mvc-4 routes

我需要使用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。

1 个答案:

答案 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");
}