zoukankan      html  css  js  c++  java
  • 在Razor Pages的Url中增加扩展名后缀

    最近在弄一个老项目的改造,想把它一个webform的程序迁移到.net core平台下,由于.net core 下不再支持webform了, 而razor pages的页面模型和webform比较类似,便采用了razor page作为新的项目的页面模型。

    在迁移过程中遇到了这样一个问题,webfrom的url是以 '.aspx' 结尾的,而razor pages是没有页面后缀的。麻烦的是老项目中许多页面的url是提供了给其它产品的,采用razor page的默认路由方案来的话,势必造成url的不兼容。而且由于历史原因,很难推动那些产品配套修改,因此,一个方案是:在razor page的新项目中,兼容老项目的路由,也就是说,允许 "pagexxx.aspx"这样的url。

    查了一下微软的官方文档Razor 页面的路由和应用约定。发现实现这样一个功能还是比较简单的,注册一个路由模型约定即可。步骤如下:

    首先新建一个路由模板:

        public class GlobalTemplatePageRouteModelConvention : IPageRouteModelConvention
        {
            public void Apply(PageRouteModel model)
            {
                var selectors = model.Selectors;
                foreach (var selector in selectors.ToArray())
                {
                    var newModel = new SelectorModel()
                    {
                        AttributeRouteModel = new AttributeRouteModel()
                        {
                            Order = 1,
                            Template = selector.AttributeRouteModel.Template + ".aspx"
                        }
                    };
                    selectors.Add(newModel);
                }
            }
        }

    为了演示方面,上面的代码只是一个简化了的实现,功能是在razor pages 默认路由的基础上,增加新的支持.aspx后缀的路由。

    然后,注册改路由模板:

        services.AddRazorPages()
         .AddRazorPagesOptions(options =>
         {
             options.Conventions.Add(new GlobalTemplatePageRouteModelConvention());
         });

    效果如下:

    这种方式也可以用来注册一些Filter,还是非常有用的。

  • 相关阅读:
    Activiti 开发案例之动态指派任务
    SpringBoot开发案例之打造十万博文Web篇
    「玩转Python」打造十万博文爬虫篇
    SpringBoot开发案例Nacos配置管理中心
    「玩转Python」突破封锁继续爬取百万妹子图
    SpringBoot开发案例之分布式集群共享Session
    「玩转树莓派」树莓派 3B+ 配置无线WiFi
    「玩转树莓派」搭建智能家居远程监控系统
    「玩转树莓派」搭建属于自己的云盘服务
    「玩转树莓派」为女朋友打造一款智能语音闹钟
  • 原文地址:https://www.cnblogs.com/TianFang/p/12866516.html
Copyright © 2011-2022 走看看