自定义路由

1.1导入router的js库

<script src="assets/vue-router.min-2.7.0.js"></script>

1.2自定义模板

显示用户列表的模板

<template id="template01">

        <div>                

                <h1>这是一个用户列表</h1>

                        <p>这个表你需要点想象力</p>        

        </div>

</template>

1.3添加用户的模板

<template id="tempalate02">

        <div>

                <h1>这是一个添加用户的界面</h1>

        </div>

1.4创建router对象

var userList={

template:'#template01',

}

var  userAdd={

template:'#template02',

}

var  r=new  VueRouter(){

routes:[

{path:"/list",component:userList},

{path:"/add",componentAdd}

]

}

1.4在vue中通过router使用路由

new Vue({

el:'#app',

router:r

}),

1.5完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--导入vue的js库-->
    <script src="assets/vue.min-v2.5.16.js"></script>
    <!--导入路由的js库-->
    <script src="assets/vue-router.min-2.7.0.js"></script>
</head>
<body>
   <template id="template01">
       <div>
           <h1>这是一个用户列表</h1>
           <p>
           这个表你需要点想象力
           </p>
       </div>
   </template>
   <template id="template02">
        <div>
          <h1>这是一个用户添加页面</h1>
        </div>
   </template>
<div id="app">
    <router-link  to="users">用户列表</router-link>
    <router-link to="adds">用户添加</router-link>
    <router-view></router-view>
</div>
<script>
    //将用户列表模板注册到vue
    Vue.component('hello1', {
        template: '#template01'
    });

    //将用户添加模板注册到Vue
    Vue.component('hello2', {
        template: "#template02"
    });

    var userList={
        template:'#template01'
    }
    var userAdd={
        template:'#template02'
    }

    var  r=new VueRouter({
        routes:[
            {path:'/users',component:userList},
            {path:'/adds',component: userAdd}
        ]
    });
    new Vue({
        el: '#app',
        router:r
    });
</script>

</body>
</html>

 

<think>嗯,用户之前问了关于ASP.NET Web API默认路由中的id参数是不是方法名,现在接着问如何自定义路由。看来用户可能正在开发Web API,遇到了路由配置的问题,或者想更灵活地控制API的URL结构。 首先,我需要回顾一下默认路由的情况。默认路由是api/{controller}/{id},这里id对应方法的参数,而不是方法名。用户现在想自定义路由,可能是因为默认路由无法满足他们的需求,比如需要更复杂的URL模式,或者想要包含action名,或者处理多个参数的情况。 接下来,用户可能需要知道几种自定义路由的方法。常见的做法包括使用属性路由(Attribute Routing)、在WebApiConfig中注册自定义路由模板、或者结合两者使用。属性路由比较灵活,可以直接在控制器或方法上添加特性,指定路由模板。而传统的基于约定的路由则是在全局配置中定义,适用于统一的路由规则。 另外,用户可能不清楚属性路由和传统路由的区别,以及何时该使用哪种方式。需要解释这两种方法的优缺点,比如属性路由提供了更细粒度的控制,而传统路由适合全局规则。 还要考虑用户可能的误区,比如自定义路由时是否会影响默认路由路由的匹配顺序问题,以及如何正确处理参数绑定。比如,当多个路由模板匹配同一个请求时,路由的顺序很重要,应该从最具体的到最一般的排列。 可能还需要提到路由约束,比如限制参数的格式或类型,避免歧义。例如,限制id必须是数字,或者使用正则表达式来匹配特定模式。 另外,用户可能想知道如何处理多个参数的情况,比如查询产品的同时需要分类和页码,这时候路由模板应该如何设计,是否需要使用查询字符串还是将其包含在路径中。 最后,要给出具体的示例,帮助用户理解如何实现自定义路由。比如,如何在控制器上添加[RoutePrefix],在方法上使用[Route],或者如何在WebApiConfig中使用MapHttpRoute方法定义新的路由模板。 总结下来,回答需要结构清晰,分步骤介绍不同的自定义方法,比较它们的适用场景,给出示例代码,并提醒注意事项,如路由顺序、参数匹配、约束条件等。这样用户可以根据自己的需求选择合适的方法,并正确配置路由。</think>在 ASP.NET Web API 中自定义路由主要有两种方式:**基于约定的路由配置** 和 **属性路由**。以下是具体实现方法和关键细节: --- ### 一、基础概念 | 路由类型 | 特点 | 适用场景 | |----------|------|----------| | **传统路由** | 全局集中配置 | 统一格式的 API 路径 | | **属性路由** | 直接在控制器/方法上标注 | 需要灵活路径或复杂参数的 API | --- ### 二、传统路由配置(全局) 在 `App_Start/WebApiConfig.cs` 中修改默认路由或添加新路由模板: #### 1. 修改默认路由 ```csharp // 默认模板:api/{controller}/{id} config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", // 添加 {action} defaults: new { id = RouteParameter.Optional } ); ``` #### 2. 添加多路由模板 ```csharp config.Routes.MapHttpRoute( name: "CustomRoute1", routeTemplate: "api/v2/{controller}/search/{keyword}", defaults: new { action = "Search" } // 强制绑定到特定方法 ); config.Routes.MapHttpRoute( name: "CustomRoute2", routeTemplate: "api/{controller}/{category}/{page}", defaults: new { page = 1 } // 设置默认值 ); ``` #### 路由匹配优先级规则 1. **顺序敏感**:按注册顺序逐个匹配 2. **模板复杂度优先**:`api/products/detail/5` ➔ 优先匹配更具体的模板 --- ### 三、属性路由(推荐方式) 通过 `[Route]` 特性直接在控制器/方法上定义路由: #### 1. 启用属性路由 ```csharp // 在 WebApiConfig 中开启 config.MapHttpAttributeRoutes(); ``` #### 2. 控制器级路由模板 ```csharp [RoutePrefix("api/products")] // 统一前缀 public class ProductsController : ApiController { [Route("")] // 匹配 GET /api/products public IHttpActionResult GetAll() { ... } [Route("{id:int}")] // 约束 id 为整数 public IHttpActionResult GetById(int id) { ... } [Route("search/{keyword}")] // 匹配 GET /api/products/search/apple public IHttpActionResult Search(string keyword) { ... } [Route("~/api/v2/products")] // 使用 ~/ 覆盖 RoutePrefix public IHttpActionResult GetV2Products() { ... } } ``` --- ### 四、高级路由特性 #### 1. 参数约束 | 约束类型 | 语法示例 | 作用 | |----------|----------|------| | 类型约束 | `{id:int}` | 只匹配整数 | | 正则表达式 | `{code:regex(^\\d{3}$)}` | 匹配 3 位数字 | | 范围约束 | `{page:min(1)}` | 页码 ≥1 | ```csharp [Route("users/{id:int:min(1)}")] // 组合约束 public IHttpActionResult GetUser(int id) { ... } ``` #### 2. 可选参数 ```csharp [Route("books/{category?}")] // 通过 ? 标记可选参数 public IHttpActionResult GetBooks(string category = "all") { ... } ``` ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值