.Net Core Web Api_笔记12_自定义属性路由

在前几篇文章中我们都是用
微软内建的RouteAttributeHttpMethodAttribute两种属性路由
而当我们不想用这两种因为要重复写太多
想要用自己封装或客制过的属性来定义路由
则可依赖.net core中的interface IRouteTemplateProvider来实践。

无论是RouteAttribute或者HttpMethodAttribute之所以能够让我们去透过在属性上用标记方式
设置路由模板
主要都是因为他们都有去实作IRouteTemplateProvider该interface

RouteAttribute
https://ithelp.ithome.com.tw/upload/images/20210920/201074525AbXNCj7Wk.png

HttpMethodAttribute
https://ithelp.ithome.com.tw/upload/images/20210920/20107452aT9i9sEtYC.png

比方我们这里想要自己有一种属性标记
这里我取名为[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://ithelp.ithome.com.tw/upload/images/20210920/20107452WThAO1IhJI.png

藉此就能做自定义封装的路由属性标记

本篇已同步发表至个人部落格
https://coolmandiary.blogspot.com/2021/09/net-core-web-api12.html


<<:  day20 : redisDB keyDB on K8S (下)

>>:  Day 18 | 常用范例:表格分页 Pagination 前後端做好只需三分钟!?

Day 10: 面试中成长

My TIP Re5ume 英文履历 1 通吃国内外市场 2 Content Education E...

第二十九天:版面组合与重构

金鱼都能懂的网页切版:26、27 版面组合 https://codepen.io/mikeyam/p...

[第十五只羊] 迷雾森林舞会IX 玩家加入房间

天亮了 昨晚1号玩家被杀死了 关於迷雾森林故事 杂讯 洛神:昨晚1号玩家被杀死了,1号玩家发动角色技...

【Day10】 声音转换概述 - 再次出发!

前言 在经过前面 9 天的准备之後,我们终於有些本钱可以涉足这个领域了,整理一下我们现在所掌握的 知...

Day 14 依个资隐私架构如何实作个资保护

在隐私规划上若先有个最上位的个资隐私架构来通盘考量产品服务的个资状况,无论是法规面、个资处理面、资讯...