Asp.net Can';无法在混合VS环境中正确处理路由
我正在Visual Studio中使用SPA模板创建一个新项目。我的目标是拥有一个Angular/SPA应用程序,该应用程序将“承载”/包含一些最终将被现代化/迁移的遗留应用程序。因此,我在SPA应用程序的页面上有一个iframe,当单击菜单项时,我想在该iframe中加载一个旧ASP.NET应用程序(它必须在iframe中,因为旧站点使用它们,其架构依赖于它们)。 我找不到正确的路线。SPA模板定义的DefaultRoute类如下(我将RouteExistingFiles更改为true): 我已经编辑了RouteConfig.cs文件以忽略“aspx”页面请求,如下所示:Asp.net Can';无法在混合VS环境中正确处理路由,asp.net,visual-studio-2013,single-page-application,Asp.net,Visual Studio 2013,Single Page Application,我正在Visual Studio中使用SPA模板创建一个新项目。我的目标是拥有一个Angular/SPA应用程序,该应用程序将“承载”/包含一些最终将被现代化/迁移的遗留应用程序。因此,我在SPA应用程序的页面上有一个iframe,当单击菜单项时,我想在该iframe中加载一个旧ASP.NET应用程序(它必须在iframe中,因为旧站点使用它们,其架构依赖于它们)。 我找不到正确的路线。SPA模板定义的DefaultRoute类如下(我将RouteExistingFiles更改为true): 我
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;
}
}
定义的默认路由处理程序如下所示:
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;
}
}
目录结构如下所示:
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;
}
}
迈斯帕
- SPA我已经解决了这个问题。这个问题是由几个问题引起的。但是,与我上面的信息相关的问题是……我需要找到正确的方法,在新站点的路由代码中忽略对旧aspx页面的请求。因此,在RouteConfig.cs文件中,我将这个ignore语句作为RegisterRoute函数的第一行:
这纠正了主要问题,还有其他一些小问题混淆了形势,但我已经确定了它们是什么,我正在努力解决这些问题。因此,忽略路由功能中的遗留URL是正确的解决方案routes.Ignore("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?"});