WebApi(三)-属性路由 自定义访问路径

本文介绍了如何在WebAPI中配置并使用属性路由,包括在WebApiConfig中启用属性路由的方法及如何通过[Route]和[RoutePrefix]特性来自定义访问路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebApi(三)-属性路由 自定义访问路径

启用属性路由:

1.在WebApiConfig中加入如下代码:

//属性路由
 config.MapHttpAttributeRoutes();

2.在Global.asax.cs里修改WebApiConfig.Register(GlobalConfiguration.Configuration)为GlobalConfiguration.Configure(WebApiConfig.Register)

注释:如果不修改会报错(原因暂不明确猜测是高版本才可使用属性路由,烦请知道的人回答一下此问题,感谢!)

此时已经启用,可以在Action上加如:

[Route("api/wyb/test")]

访问为http://localhost:13855/api/wyb/test

每个都要写个api比较麻烦可以在Controller上加一个[RoutePrefix("api")],如此Action只需要[Route("wyb/test")]就可以。当然前缀可是[RoutePrefix("api/test")]等等

这样的话要是有其中某个Action不同可以使用一个波浪符号重写路由前缀[Route("~/api/wyb/test")]

除此之外还可以设置名称:[Route("wyb/test",Name="testName")]  (还未验证name可以如何使用)

 

posted @ 2016-03-22 23:54 wuyubing 阅读( ...) 评论( ...) 编辑 收藏
<think>首先,用户的问题是:“请问Sa-Token如何实现自定义路由校验”。这是一个关于Sa-Token框架的问题,具体是如何实现自定义路由校验逻辑。 我回顾了系统级指令:-所有行内数学表达式必须使用$...$格式。-独立公式必须使用$$...$$格式并单独成段。- LaTeX语法正确。-使用中文回答。-生成相关问题。 -回答中引用的段落末尾自然地添加引用标识。-回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 用户提供了几个引用:-引用[1]:展示了在Spring配置中注册拦截器,使用SaRouter来匹配路径并设置权限检查。 -引用[2]:展示了使用SaReactorFilter注册全局过滤器。-引用[3]:展示了SSO认证的拦截配置。 -引用[4]:简要描述了登录认证流程。 -引用[5]:展示了登录接口的实现。 用户的意图是了解如何在Sa-Token中自定义路由校验逻辑。从引用中,我可以提取关键信息: -在SpringBoot应用中,通常通过实现WebMvcConfigurer接口,在addInterceptors方法中添加SaInterceptor。-在SaInterceptor中,使用SaRouter.match()来定义路由匹配规则和校验逻辑。-校验逻辑可以是简单的权限检查,如StpUtil.checkPermission(),也可以是自定义的函数。 我的回答应该: 1.结构清晰:逐步解释如何实现。2.使用中文。3.生成相关问题。4.在引用段落末尾添加引用标识。5.确保回答真实可靠,基于提供的引用。大纲回答:-介绍:简要说明Sa-Token如何实现路由校验。 -步骤分解:1.注册拦截器:在Spring配置类中添加SaInterceptor。2.使用SaRouter定义路由规则:匹配路径,设置校验逻辑。3.自定义校验逻辑:使用lambda表达式定义自定义检查。4.示例代码:提供代码片段。-生成相关问题。 参考引用:-引用[1]展示了核心方法:使用SaRouter.match()来设置权限校验。-引用[2]展示了全局过滤器的使用。 -引用[3]展示了SSO场景。-引用[4]和[5]提供了登录认证的上下文。关键点: -SaInterceptor允许定义路由匹配规则。- SaRouter.match()方法用于指定路径,并调用check()方法设置校验逻辑。 -校验逻辑可以是内置的如StpUtil.checkLogin()自定义函数。 示例代码:-基于引用[1],提供一个简单的自定义校验示例。回答结构: 1.解释概念。2.详细步骤。3.代码示例。4.相关问题。确保数学表达式正确:但这个问题可能不涉及数学,所以可能不需要LaTeX。如果有变量,使用$...$。 最终,生成相关问题。</think>### Sa-Token 实现自定义路由校验详解 在 Sa-Token 框架中,自定义路由校验主要通过定义路由匹配规则和校验逻辑来实现。核心是利用 `SaInterceptor` 和 `SaRouter` 类,结合 Spring Boot 的拦截器机制。以下是逐步实现的指南: #### 1. **注册全局拦截器** 在 Spring Boot 配置类中,注册 `SaInterceptor` 作为全局拦截器。通过 `addInterceptors` 方法添加路径匹配规则: ```java @Configuration public class SaTokenConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SaInterceptor(handler -> { // 使用 SaRouter 定义路由规则和校验逻辑 SaRouter.match("/api/**") // 匹配所有 /api 开头的路径 .check(r -> { // 自定义校验逻辑:例如检查用户权限 StpUtil.checkLogin(); // 基础登录校验 if (!StpUtil.hasPermission("custom:access")) { throw new SaTokenException("无自定义权限"); } }); SaRouter.match("/public/**").notMatch("/public/exclude") // 排除特定路径 .check(r -> StpUtil.checkPermission("public")); // 内置权限校验 })).addPathPatterns("/**"); // 拦截所有请求 } } ``` - **关键点**: - `SaRouter.match()` 指定匹配的路由模式(支持通配符)。 - `.notMatch()` 可排除子路径,避免冲突。 - `.check()` 方法接受 lambda 表达式,用于定义自定义校验逻辑。 - 校验逻辑中可调用 `StpUtil` 工具类(如 `checkLogin()`, `hasPermission()`)或自定义业务代码[^1][^2]。 #### 2. **自定义校验逻辑的实现** 在 `.check()` 方法中,可编写任意校验逻辑: - **简单校验**:直接使用 Sa-Token 内置方法,如 `StpUtil.checkPermission("admin")`。 - **复杂校验**:通过 lambda 表达式实现业务逻辑,例如: ```java SaRouter.match("/order/**") .check(r -> { // 自定义条件:仅允许特定角色的用户访问 if (!StpUtil.hasRole("manager")) { throw new SaTokenException("权限不足"); } // 添加额外业务检查,如请求参数验证 String userId = r.getParam("userId"); if (!userId.equals(StpUtil.getLoginIdAsString())) { throw new SaTokenException("用户不匹配"); } }); ``` - **优势**:支持动态决策,例如根据请求参数、头信息或数据库查询结果拒绝访问[^1][^5]。 #### 3. **全局过滤器的替代方案(适用于非 Spring MVC 项目)** 在响应式或非 Web 应用中,可使用 `SaReactorFilter` 定义全局校验: ```java @Bean public SaReactorFilter saReactorFilter() { return new SaReactorFilter() .addInclude("/**") // 包含所有路径 .setAuth(r -> { SaRouter.match("/secure/**", () -> { // 自定义校验:检查 Token 有效性 if (!StpUtil.getTokenValue().startsWith("custom_")) { throw new SaTokenException("非法 Token 格式"); } }); }) .setError(e -> SaResult.error(e.getMessage())); // 统一异常处理 } ``` - 适用于网关或微服务架构,提供更灵活的拦截点[^2]。 #### 4. **注意事项** - **路径优先级**:SaRouter 按声明顺序匹配,优先处理首个匹配规则。 - **性能优化**:避免在校验逻辑中执行耗时操作(如数据库查询),可使用缓存。 - **异常处理**:通过 `.setError()` 或全局异常处理器捕获 `SaTokenException`,返回友好错误信息[^2][^5]。 - **测试建议**:使用 Postman 或单元测试验证路由规则,确保路径匹配和校验逻辑正确。 ### 总结 Sa-Token 的自定义路由校验通过 `SaInterceptor` 和 `SaRouter` 实现,核心是: 1. **定义路由匹配规则**(`match`/`notMatch`)。 2. **注入校验逻辑**(lambda 表达式支持自定义业务)。 3. **结合 Spring 拦截器注册**。 此方法灵活且高效,适用于权限控制、访问限制等场景[^1][^2][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值