有什么办法可以在C#MVC中进行自定义路由?

时间:2018-07-06 05:53:42

标签: c# asp.net-mvc

我是C#MVC的新手, 这是我的默认RouteConfig文件,

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

当我运行项目http://localhost:50382时,它将重定向默认的home索引方法。

如何构建像http://localhost:50382/somestringcode这样的自定义网址并调用特定的ActionMethod。类似于指向特定ActionMethod的自定义路由之类的东西,字符串代码将作为参数传递。

public ActionResult Method1( string code)
{
    return View();
}

2 个答案:

答案 0 :(得分:1)

您要搜索的是attribute routing。这意味着要明确指定URL路由。
首先,您需要启用它

routes.MapMvcAttributeRoutes();

然后将Route属性添加到所需的操作:

[Route("")]
public ActionResult Method1( string code)
 {
     return View();
 }

由于code参数是简单类型,因此将在请求URL中进行搜索。

答案 1 :(得分:0)

您需要执行以下操作,其中controller1是包含Method1的控制器名称,并确保将其放置在第一位并保留原始路由配置,因此当它与该路由不匹配时,它将使用默认路由路线。 请注意,这是一种不好的做法,如果路由试图访问控制器“索引”的默认操作(如@stephen在下面的注释中提到),它将失败,这就是为什么我建议在路线。

routes.MapRoute
(
    name: "Method1",
    url: "Action1/{code}",
    defaults: new { controller = "controller1", action = "Method1", code = "default"}
);