我有一個帶有此 API 的 Web API 和客戶端庫的應用程式。我還添加了一個共享庫,其中包含 API 端點路由。
這是一個示例:
public static class Routes
{
/// <summary>
/// Default Uri separator.
/// </summary>
private const string Slash = "/";
/// <summary>
/// Default API endpoint prefix.
/// </summary>
private const string Prefix = $"api{Slash}";
/// <summary>
/// API version.
/// </summary>
private const string Version = $"v1{Slash}";
/// <summary>
/// Base API route.
/// </summary>
private const string Base = $"{Prefix}{Version}";
/// <summary>
/// Static class that contains users API endpoint routes.
/// </summary>
public static class Users
{
/// <summary>
/// Base controller route.
/// </summary>
private const string Controller = $"{Base}{nameof(Users)}{Slash}";
/// <summary>
/// Users list endpoint route.
/// </summary>
public const string List = $"{Controller}{nameof(List)}";
/// <summary>
/// User registration endpoint route.
/// </summary>
public const string Register = $"{Controller}{nameof(Register)}";
}
}
注意:這是帶有新的常量內插字串功能的C# 10 。
通過這種方式存盤路由,我可以輕松地在 API 控制器宣告中以及在對這些端點的 API 呼叫中使用它們。但我很好奇,也許有更好的方法來做到這一點?
您將如何實作共享 API 路由功能?提前致謝。
uj5u.com熱心網友回復:
為 API 路由使用常量是標準方法。我認為沒有比這更好的方法了。只是一個小說明 - 您在 Users 類中使用 nameof() ,如果有人更改了類名,這可能會很脆弱。您真的希望重命名 Users 類會導致更改您的路線嗎?
您不能使用配置,因為配置值是在運行時讀取的,而 Route() 屬性值(作為所有屬性)必須在編譯時填充。
uj5u.com熱心網友回復:
如您所知,Web API 路由類似于 ASP.Net MVC 路由。Web API 支持兩種型別的路由。
- 基于約定的路由
- 屬性路由。
您可以在 web api 中配置多個路由。
例子 -
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
// school route
config.Routes.MapHttpRoute(
name: "School",
routeTemplate: "api/myschool/{id}",
defaults: new { controller="school", id = RouteParameter.Optional }
constraints: new { id ="/d " }
);
// default route
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
您還可以使用屬性路由,它最適合在您的應用程式中添加多個路由。您可以控制您的方法并通過屬性路由添加前綴。
例子 :
[RoutePrefix("api/")]
[Route("api/{employees}/{id}")]
public Employee GetDetails(int id)
{
return listEmp.First(e => e.ID == id);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/367785.html
