[英]How to Register Custom IRouter in .Net 7 MVC Application?
我有一個自定義 IRouter 實現,但我不知道如何在 .Net 7 MVC 應用程序中注冊它。
我想要完成的是:傳入請求的形式為https://example.com/{id}
並且當這樣的請求進入時,我需要訪問數據庫以檢索 controller 和針對該{id}
的操作,對其進行一些檢查,如果一切正常,則將請求連同整個 RequestContext 傳遞給默認路由器。 其背后的原因是這樣的 url 僅對給定時間和訪問用戶的子集有效。 此外,通過查看 url 一定不能猜到基本操作和 controller。
我想出的是一個 cutom IRouter 實現(它也允許我創建那些 Urls)但我似乎無法弄清楚如何在應用程序啟動時注冊。
在 .Net 7 中使用自定義 IRouter 仍然是正確的方法嗎? 我如何注冊一個? 還是我完全走錯了路?
一種選擇是從端點路由切換回來:
builder.Services.AddMvc(options => options.EnableEndpointRouting = false);
app.UseMvc(routeBuilder => routeBuilder.Routes.Add(new CustomRouter(routeBuilder.DefaultHandler)));
更新程序
替代方法是使用MapDynamicControllerRoute
。 沿着這條線的東西:
builder.Services.AddScoped<MyDynamic>();
// ...
app.MapDynamicControllerRoute<MyDynamic>("/{*internalid}");
public class MyDynamic: DynamicRouteValueTransformer
{
public override ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
{
if (values.TryGetValue("internalid", out var value) && value is string s && s == "777") // simulate some search for id
{
values["controller"] = "Home";
values["action"] = "test";
}
return new ValueTask<RouteValueDictionary>(values);
}
}
請注意,由於您仍在使用默認路由管道,這看起來像是通過默默無聞的安全性,這通常不是一個好方法,您可能應該更好地實施適當的安全限制(您不應該依賴“不可能”來猜測實際路由) .
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.