在中间件中更改 Asp.Net Core 3.1 中的 RouteData
Changing RouteData in Asp.Net Core 3.1 in Middleware
我最近将我的 .Net Core 2.1 应用程序更新到 3.1,但有一部分没有按预期升级。
我编写了代码来将子域映射到所描述的区域
我现在意识到使用 app.UseMvc()
的方法应该用 app.UseEndpoints()
代替,但是我在 3.1 框架中找不到任何地方可以让我写入 RouteData
在 app.UseEndpoints()
之前
//update RouteData before this
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
"admin", "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
"default", "{controller=Home}/{action=Index}/{id?}");
});
有没有办法使用中间件写入 RouteData
?
我试过回到 app.UseMvc()
,因为它仍在框架中,但 MvcRouteHandler
似乎不再存在了
app.UseMvc(routes =>
{
routes.DefaultHandler = new MvcRouteHandler(); //The type of namespace could not be found
routes.MapRoute(
"admin",
"{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
"default",
"{controller=Home}/{action=Index}/{id?}");
});
尝试使用custom middleware。
添加引用使用Microsoft.AspNetCore.Routing
并使用Httpcontext.GetRouteData()
方法实现RouteData
app.UseRouting();
app.Use(async (context, next) =>
{
string url = context.Request.Headers["HOST"];
var splittedUrl = url.Split('.');
if (splittedUrl != null && (splittedUrl.Length > 0 && splittedUrl[0] == "admin"))
{
context.GetRouteData().Values.Add("area", "Admin");
}
// Call the next delegate/middleware in the pipeline
await next();
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
"admin", "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
"default", "{controller=Home}/{action=Index}/{id?}");
});
我最近将我的 .Net Core 2.1 应用程序更新到 3.1,但有一部分没有按预期升级。
我编写了代码来将子域映射到所描述的区域
我现在意识到使用 app.UseMvc()
的方法应该用 app.UseEndpoints()
代替,但是我在 3.1 框架中找不到任何地方可以让我写入 RouteData
在 app.UseEndpoints()
//update RouteData before this
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
"admin", "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
"default", "{controller=Home}/{action=Index}/{id?}");
});
有没有办法使用中间件写入 RouteData
?
我试过回到 app.UseMvc()
,因为它仍在框架中,但 MvcRouteHandler
似乎不再存在了
app.UseMvc(routes =>
{
routes.DefaultHandler = new MvcRouteHandler(); //The type of namespace could not be found
routes.MapRoute(
"admin",
"{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
"default",
"{controller=Home}/{action=Index}/{id?}");
});
尝试使用custom middleware。
添加引用使用Microsoft.AspNetCore.Routing
并使用Httpcontext.GetRouteData()
方法实现RouteData
app.UseRouting();
app.Use(async (context, next) =>
{
string url = context.Request.Headers["HOST"];
var splittedUrl = url.Split('.');
if (splittedUrl != null && (splittedUrl.Length > 0 && splittedUrl[0] == "admin"))
{
context.GetRouteData().Values.Add("area", "Admin");
}
// Call the next delegate/middleware in the pipeline
await next();
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
"admin", "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
"default", "{controller=Home}/{action=Index}/{id?}");
});