再从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}"); });