加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 无法在混合VS环境中正确处理路由

发布时间:2020-12-16 03:16:55 所属栏目:asp.Net 来源:网络整理
导读:我正在使用SPA模板在Visual Studio中创建一个新项目.我的目标是拥有一个Angular / SPA应用程序,它将“托管”/包含一些最终将进行现代化/迁移的遗留应用程序.所以,我在SPA应用程序的页面上有一个iframe,当点击一个菜单项时,我想在iframe中加载一个遗留的ASP.N
我正在使用SPA模板在Visual Studio中创建一个新项目.我的目标是拥有一个Angular / SPA应用程序,它将“托管”/包含一些最终将进行现代化/迁移的遗留应用程序.所以,我在SPA应用程序的页面上有一个iframe,当点击一个菜单项时,我想在iframe中加载一个遗留的ASP.NET应用程序(它必须在iframe中,作为遗留站点使用它们,它的架构依赖于它们).
我无法正确使用路由. SPA模板定义了一个这样的DefaultRoute类(我将RouteExistingFiles更改为true):

public class DefaultRoute : Route
{
    public DefaultRoute()
        : base("{*path}",new DefaultRouteHandler()) {
        this.RouteExistingFiles = true;
    }
}

我编辑了RouteConfig.cs文件以忽略“aspx”页面请求,如下所示:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes) {
        routes.Ignore("*.aspx");
        routes.Add("Default",new DefaultRoute());
    }
}

定义的默认路由处理程序如下所示:

public class DefaultRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext) {
        // Use cases:
        //     ~/            -> ~/views/index.cshtml
        //     ~/about       -> ~/views/about.cshtml or ~/views/about/index.cshtml
        //     ~/views/about -> ~/views/about.cshtml
        //     ~/xxx         -> ~/views/404.cshtml
        var filePath = requestContext.HttpContext.Request.AppRelativeCurrentExecutionFilePath;

        if (filePath == "~/") {
            filePath = "~/views/index.cshtml";
        }
        else {
            if (!filePath.StartsWith("~/views/",StringComparison.OrdinalIgnoreCase)) {
                filePath = filePath.Insert(2,"views/");
            }

            if (!filePath.EndsWith(".cshtml",StringComparison.OrdinalIgnoreCase)) {
                filePath = filePath += ".cshtml";
            }
        }

        var handler = WebPageHttpHandler.CreateFromVirtualPath(filePath); // returns NULL if .cshtml file wasn't found

        if (handler == null) {
            requestContext.RouteData.DataTokens.Add("templateUrl","/views/404");
            handler = WebPageHttpHandler.CreateFromVirtualPath("~/views/404.cshtml");
        }
        else {
            requestContext.RouteData.DataTokens.Add("templateUrl",filePath.Substring(1,filePath.Length - 8));
        }

        return handler;
    }
}

目录结构如下:

MySPA

> SPA< - 包含SPA应用程序(.net 4.5)
> Legacy< - 包含遗留应用程序(.net 3.0)
在IIS中,我将旧文件夹设置为SPA应用程序中的虚拟目录(子目录).

如何设置路由,以便在单击菜单项并发送请求(包含具有查询字符串信息的URL)的.aspx页面时,请求可以路由到旧应用程序?

解决方法

我已经解决了这个问题.这个问题是由几个问题引起的.但是,大多数与我上面的信息有关的问题是……我需要找到正确的方法来忽略新站点的路由代码中对旧版aspx页面的请求.因此,在RouteConfig.cs文件中,我将此ignore语句作为RegisterRoute函数的第一行放置:

routes.Ignore("{*allaspx}",new { allaspx =  @".*.aspx(/.*)?"});

这纠正了主要问题,还有其他一些小问题使情况混淆但是,我已经确定了它们是什么,我正在研究它们.因此,忽略路由功能中的遗留URL是正确的解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读