iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
自我挑戰組

.NET Core WebApi網頁應用開發系列 第 12

.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


上一篇
.Net Core Web Api_筆記11_組合路由
下一篇
.Net Core Web Api_筆記13_api結合ADO.NET資料庫操作part1_專案前置準備到資料新增
系列文
.NET Core WebApi網頁應用開發16

尚未有邦友留言

立即登入留言