【问题标题】:Is there any way to make a custom route in C# MVC? [duplicate]有没有办法在 C# MVC 中创建自定义路由? [复制]
【发布时间】:2018-07-06 05:53:42
【问题描述】:

我是 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 时,它会重定向默认的主页索引方法。

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

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

【问题讨论】:

  • 你有什么尝试吗?
  • 如果你用谷歌搜索一下,会有很多例子。尝试一些东西,如果它不是你所期望的,请寻求帮助

标签: c# asp.net-mvc


【解决方案1】:

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

routes.MapMvcAttributeRoutes();

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

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

由于code参数是简单类型,所以会在请求URL中搜索。

【讨论】:

    【解决方案2】:

    你需要做这样的事情,其中​​controller1是包含Method1的控制器名称,并确保你把它放在第一位,并保留原来的路由配置,所以当它不匹配这个路由时,它将使用默认路线。 请注意这是不好的做法,如果路由试图访问控制器“索引”的默认操作,如下面 cmets 中提到的@stephen,它将失败,这就是为什么我建议添加前缀 ex“Action1”到路线。

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

    【讨论】:

    • 谢谢你,你解决了我的问题:)
    • 错误 - 所有其他路由都会失败。如果用户输入../Home../Products 或带有一个段的东西,是否会使用该方法而不是那些控制器的预期Index 方法
    • 非常感谢@StephenMuecke,我不知道我是怎么错过的,通常我会建议在路线上附加一些东西,比如"Method1/{code}",但我遵循他的偏好,这是非常糟糕的做法,它会像你提到的那样失败。
    • 添加前缀就可以了,否则你需要根据副本进行路由约束
    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 2016-09-13
    • 2016-08-25
    • 2011-08-03
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多