我正在将Asp.Net Core 2.2 Mvc应用程序转换为3.0;当我尝试重构代码以使用UseEndpoints代替UseMvc时,似乎无法识别路由。
以下是使用UseMvc的startup.cs中的工作代码
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/EventLog/Error");
app.UseHsts();
}
app.UseStaticfiles();
app.UseCookiePolicy();
app.UseSession();
app.UseRequestLocalization();
app.UseAuthentication();
app.UseMvc(endpoints =>
{
endpoints.MapRoute("Grid","Grid/{action}/{view}",new
{
Controller = "Grid",action = "View"
});
endpoints.MapRoute("default","{controller=Portal}/{action=Index}/{id?}");
});
}
这是UseEndpoints的重构代码
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/EventLog/Error");
app.UseHsts();
}
app.UseStaticfiles();
app.UseCookiePolicy();
app.UseSession();
app.UseRequestLocalization();
app.UseAuthentication();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute("Grid","Grid/{action}/{virtualaction}",action = "View"
});
endpoints.MapControllerRoute("default","{controller=Portal}/{action=Index}/{id?}");
});
}
当我使用UseEndpoints代码运行应用程序时,我从自定义AuthorizationHandler中收到错误消息,因为httpContextaccessor.HttpContext.Request.RouteValues中没有值。如果删除Grid路由的MapControllerRoute代码,则默认路由可以与AuthorizationHandler一起正常工作。使用UseEndpoints时可以有多个控制器路由模式吗?