在前几篇文章中我们都是用
微软内建的RouteAttribute跟HttpMethodAttribute两种属性路由
而当我们不想用这两种因为要重复写太多
想要用自己封装或客制过的属性来定义路由
则可依赖.net core中的interface IRouteTemplateProvider来实践。
无论是RouteAttribute或者HttpMethodAttribute之所以能够让我们去透过在属性上用标记方式
设置路由模板
主要都是因为他们都有去实作IRouteTemplateProvider该interface
RouteAttribute
HttpMethodAttribute
比方我们这里想要自己有一种属性标记
这里我取名为[SuperManRoute(....)]
可再专案新建一个目录取名为Services
新建一个Class 命名为SuperManRouteAttribute
然後去继承Attribute这个Base Class
并实作IRouteTemplateProvider
这里改写如下
using Microsoft.AspNetCore.Mvc.Routing;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace NetCoreApiTest1.Services
{
/// <summary>
/// Custom Attribute Route
/// </summary>
public class SuperManRouteAttribute : Attribute, IRouteTemplateProvider
{
public string Template => "superman/[controller]";
public int? Order => 1;
public string Name { get; set; }
}
}
外部使用
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using NetCoreApiTest1.Services;
namespace NetCoreApiTest1.Controllers
{
[SuperManRoute(Name ="CustomAttrRoute")]
[ApiController]
public class AccountController : ControllerBase
{
[Route("")]
[Route("UserList")]
[Route("GetUsers")]
public string Users()
{
return "users data...";
}
}
}
localhost:24708/superman/account
藉此就能做自定义封装的路由属性标记
本篇已同步发表至个人部落格
https://coolmandiary.blogspot.com/2021/09/net-core-web-api12.html
<<: day20 : redisDB keyDB on K8S (下)
>>: Day 18 | 常用范例:表格分页 Pagination 前後端做好只需三分钟!?
My TIP Re5ume 英文履历 1 通吃国内外市场 2 Content Education E...
金鱼都能懂的网页切版:26、27 版面组合 https://codepen.io/mikeyam/p...
天亮了 昨晚1号玩家被杀死了 关於迷雾森林故事 杂讯 洛神:昨晚1号玩家被杀死了,1号玩家发动角色技...
前言 在经过前面 9 天的准备之後,我们终於有些本钱可以涉足这个领域了,整理一下我们现在所掌握的 知...
在隐私规划上若先有个最上位的个资隐私架构来通盘考量产品服务的个资状况,无论是法规面、个资处理面、资讯...