在前幾篇文章中我們都是用
微軟內建的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