我有一个使用Mvc和OpenID Connect Auth。
的ASP.NET Core应用程序在OpenID事件处理程序中,我想处理用户拒绝auth服务器上的同意屏幕的情况,并且我想将用户重定向到特定页面,使用路由器生成重定向URL。我只是不喜欢硬编码的网址。
所以,我必须实现自定义的UseMvc方法,该方法通过out-parameter将IRouter返回给调用方法。然后我可以将它保存到Startup方法的属性中并使用其中的每个方法。
问题是我的解决方案对我来说似乎不对,就像应该有一种更简单的方法来完成我想要的。只是好奇是否有人可以指出我正确的方向。
答案 0 :(得分:0)
只要代码在路由中间件之后运行(由UseMvc()
添加,就可以访问路由器。因此,在MVC之前运行的任何自定义中间件都无法访问路由。
基本上任何类型的MVC结构(如控制器,过滤器,标记助手等)都可以像以下任何一样访问路由器:
var routers = httpContext.GetRouteData().Routers;
var routers httpContext.Features.Get<IRoutingFeature>().RouteData.Routers;
但是如果您的代码已经是MVC构造,那么最好使用IUrlHelper
使用以下任何方法生成URL:
urlHelper.Action("Index", "Home");
IUrlHeleper
可以在多个位置随时使用(例如Url
派生类中的Controller
属性),但您也可以使用this question中的DI来获取它。 (只要使用DI解析它的代码在路由中间件之后运行!)