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