再从net mvc升级net core中,以前mvc使用了httpModules,这次吧升级过程详细说明下:

net mvc:

首先web.config需要配置:
<system.web>
    <add type="DTcms.Web.Mvc.UI.HttpModule, DTcms.Web.Mvc.UI" name="HttpModule" />
</system.web>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthentication" />
      <add type="DTcms.Web.Mvc.UI.HttpModule, DTcms.Web.Mvc.UI" name="HttpModule" />
    </modules>
</system.webServer>

创建HttpModule类,这里我使用的是DTcms的处理方法
/// <summary>
/// DTcms的HttpModule类
/// </summary>
public class HttpModule : IHttpModule
{
    /// <summary>
        /// 实现接口的Init方法
        /// </summary>
        /// <param name="context"></param>
        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(ReUrl_BeginRequest);
        }

        /// <summary>
        /// 实现接口的Dispose方法
        /// </summary>
        public void Dispose() { }
        
        /// <summary>
        /// 页面请求事件处理
        /// </summary>
        /// <param name="sender">事件的源</param>
        /// <param name="e">包含事件数据的 EventArgs</param>
        private void ReUrl_BeginRequest(object sender, EventArgs e)
        {
            //此处太多就不一一写,需要的可以联系
        }
}

net core:

/// <summary>
/// 自定义动态路由
/// </summary>
public partial class HttpModule : DynamicRouteValueTransformer
{
    public override async ValueTask<RouteValueDictionary> TransformAsync(HttpContext context, RouteValueDictionary values)
    {
        var routevalue = new RouteValueDictionary
            {
                { "controller", "home" },
                { "action", "index" },
                { "pagename", "" }
            };
        //处理方法也差不多,需要的是指定 controller,和mvc的路由相似
        return routevalue;
    }
}

同样需要注册服务和路由
services.AddScoped<HttpModule>();
app.UseEndpoints(endpoints =>
{
    endpoints.MapDynamicControllerRoute<HttpModule>("/{**slug}");
});