使用asp.net mvc配置路由操作教程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用asp.net mvc配置路由操作教程相关的知识,希望对你有一定的参考价值。

参考技术A 方法步骤
1、找到路由配置文件
2、打开文件之后,添加代码:
3、代码:routes.MapRoute(
"product-details",
"product/id",
new

controller
=
"Product",
action
=
"Details",
id
=
@"d"
);
说明:
(1)MapRoute方法的第一个参数是本条路由的名称,如果指定,则每条路由名称应唯一,也可以放空不填
(2)第二个参数指的是url的格式,如product/123,表示是的编号为123的产品的详细信息,还可以再加复杂点,如/product/category/id,表示"产品/类别/编号"
(3)第三个参数设置默认值及限制,可以使用正则表达式
(4)其实还有第四个参数,可以指定不同的area
(5)路由可以配置多条,并且按顺序执行,在前面的优先级较高
配置好,编译运行,可以直接访问:/product/123,而不是原来的/product/details/123
4、还可以配置带有分类参数的路由,使得访问路径可以变成:/product/food或/product/food/2,前者表示food分类下的所有商品,后者表示food分类下编号为2的商品
5、还可以对分类名进行限制,只允许出现其中的名称,示例表示只允许出现四种可能,其他的分类名都是非法的
6、如果你创建了Area,那么你需要添加一个命名空间,不然会产生冲突,这个是主要路由配置示例
7、这个是Area中的路由配置示例,其中,每个area都会有一个默认的配置文件,你打开之后,就在这里设置命名空间

ASP.NET MVC 中的动态路由操作名称

【中文标题】ASP.NET MVC 中的动态路由操作名称【英文标题】:Dynamic routing action name in ASP.NET MVC 【发布时间】:2017-01-04 05:55:26 【问题描述】:

我想创建一个到如下 URL 的动态路由:

http://localhost:51577/Item/AnyActionName/Id

请注意,控制器名称是静态的,不需要是动态的。另一方面,我需要使动作名称部分动态化,这样无论在 URL 的该部分中写入什么,我都会将用户重定向到 Item 控制器内的 Index 动作。

到目前为止我尝试过的是:

public static void RegisterRoutes(RouteCollection routes)

    routes.MapRoute(
        "Items",
        "Item/action/id",
        new  controller = "Item", action = "Index",  id = UrlParameter.Optional );

当我构建我的应用程序时,我收到以下错误:

找不到资源。

编辑

这是我的Global.asax 文件和routeconfig.cs 文件:

public class MvcApplication : System.Web.HttpApplication


    protected void Application_Start()
    
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    

这是RouteConfig.cs 文件的内容以及@Nkosi 提供的答案:

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 
        );

        routes.MapRoute(
            name: "Items",
            url: "Item/id/*slug",
            defaults: new  controller = "Item", action = "Index", slug = UrlParameter.Optional 
        );
    

【问题讨论】:

所以即使有人请求item/create,它也应该进入索引操作? 是的,但它永远不会是项目/创建,它将是项目的名称:) 那么你是说 url 的 action 部分是项目的名称吗?你有参数吗?你能分享 Index 操作方法签名和你试图访问的 url 吗? 是的,我可以分享,项目的 ID 是我将用于检索项目数据的参数,动态操作名称只是为了使其更人性化: ) 你能分享你正在尝试的 url 以及你希望它如何映射到吗? 【参考方案1】:

您在问题中所指的内容称为蛞蝓。

我在这里为 web api 回答了一个类似的问题

Web api - how to route using slugs?

在末尾加上 slug,路由配置看起来像这样

public static void RegisterRoutes(RouteCollection routes) 

    routes.IgnoreRoute("resource.axd/*pathInfo");

    routes.MapRoute(
        name: "Items",
        url: "Item/id/*slug",
        defaults: new  controller = "Item", action = "Index", slug = RouteParameter.Optional 
    );

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


可以匹配示例控制器操作...

public class ItemController : Controller 
    public ActionResult Index(int id, string slug = null) 
        //...
    

示例网址...

"Item/31223512/Any-Item-Name"

然后将参数匹配如下...

id = 31223512 slug = "Any-Item-Name"

而且因为 slug 是可选的,所以上面的 URL 仍然会匹配到

"Item/31223512"

【讨论】:

以上是关于使用asp.net mvc配置路由操作教程的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC教程五:ASP.NET MVC中的路由

ASP.NET MVC路由配置详解

Web API系列教程2.1 — ASP.NET Web API中的路由机制

ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程

asp.net mvc 路由:如何使用默认操作但非默认参数?

ASP.NET Core MVC 中两种路由的简单配置