- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我开发了一个 Angular 2 spa,它将托管在 ASP.NET MVC 5 应用程序中。我希望每个请求都转到一条路由 -/home/index - 所以我删除了默认路由并将其替换为一个包罗万象的路由:
routes.MapRoute(
name: "spa-catch-all",
url: "{*anything}",
defaults: new { controller = "Home", action = "Index" });
这是 RouteConfig.cs 文件中的唯一路由。
如果我在服务器 URL 之后没有任何路径值的情况下访问我的应用程序,如下所示:
http://myserver.org/
然后一切正常。如果我尝试访问这样的 URL:
http://myserver.org/sectionname
应用程序返回 404。
我已经安装了 Phil Haack 的 Route Debugger NuGet 包来尝试诊断这个问题,调试器告诉我我已经删除的 asp.net 默认路由与我的 url 匹配。事实上,我什至没有看到包罗万象的路由,至少没有像我在调试器生成的“所有路由”表中定义的那样(它显示 {*catchall} 而不是 {*anything})。
MVC 似乎忽略了我的 RouteConfig 文件。
更新 1:
这是完整的 RouteConfig.cs 文件:public static void RegisterRoutes(RouteCollection routes)
namespace MyAppNamespace
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "spa-catch-all",
url: "{*anything}",
defaults: new { controller = "Home", action = "Index" });
}
}
}
我确实需要指出以下几点。
更新 2:
在绝望中,我去添加了两个新的 Controller 来匹配默认路由——我们称它们为“Path1”和“Path2”——来匹配默认 Controller ({controller}/{action}/{ id}) 那甚至不在该死的 ROUTECONFIG 文件中,但是 MVC 仍然坚持匹配。这适用于我的基本情况(http://myapp/path1
和 http://myapp/path2
),但它仍然不适用于子路径(http://myapp/path1/subpath1
).
我几乎确定要么我的路由配置被完全忽略(不知道为什么),要么捕获我路径中的所有参数根本没有按预期工作。我在下面附加了 global.asax.cs 文件和 routeconfig.cs 文件(就现在而言)。
using System;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
namespace MyNamespace
{
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
using System.Web.Mvc;
using System.Web.Routing;
namespace MyNamespace
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "CatchAll",
url: "{*any}",
defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional}
);
}
}
}
我没有想法,很想听听大家的建议。
更新 3:
在更加绝望的情况下,我已经实现了一个自定义路由处理程序。我什至不在乎它现在是否有效;我只是希望它在我发出请求时遇到断点。
我创建了一个名为“SpaRouteHandler”的非常简单的处理程序,它返回我的自定义 HttpHandler,创造性地称为 SpaHandler。目前,SpaHandler 什么都不做——它只是抛出一个异常。我只是想确认该死的东西被击中了。
这是我的代码的最新版本:
using System;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
namespace MyNamespace
{
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
}
using System.Web.Mvc;
using System.Web.Routing;
namespace MyNamespace
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteValueDictionary defaults = new RouteValueDictionary {{"controller", "Home"}, {"action", "Index"}};
var customRoute = new Route("{*.}", defaults, new SpaRouteHandler());
routes.Add(customRoute);
}
}
}
using System.Web;
using System.Web.Routing;
namespace MyNamespace
{
public class SpaRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new SpaHandler(requestContext);
}
}
}
using System;
using System.Net;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MyNamespace
{
public class SpaHandler : IHttpHandler
{
public RequestContext LocalRequestContext { get; set; }
public SpaHandler(RequestContext requestContext)
{
LocalRequestContext = requestContext;
}
public bool IsReusable
{
get
{
return false;
}
}
public void ProcessRequest(HttpContext context)
{
throw new NotImplementedException("Just throw an error please");
}
}
}
异常永远不会被命中。好的旧默认路由 - 配置中不存在 - 似乎仍然有效。
我到底做错了什么?!?!?!?!?
最佳答案
事实证明,这很奇怪。我在最初创建项目时更改了 Web 应用程序的命名空间,并使用 ReSharper 的调整命名空间重构工具来调整整个项目的命名空间。但是,无论出于何种原因,它都没有更改 Inherits=""
中的 namespace 引用。 <Application />
的属性global.asax 文件中的标记。它引用了旧版本的 DLL,所以我的 Application_Start 甚至都没有被调用。
一旦我更改了该引用,一切都按计划开始工作。
关于angular - ASP.NET MVC5 应用程序捕获所有路由被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37996876/
我正在尝试在项目中学习和添加 Angular 国际化。我只能理解 Angular 文档 (https://angular.io/guide/i18n-overview) 的编译时翻译。 我需要这样的东
在我的 Angular 应用程序中,基于登录用户,我想通过显示/隐藏不同的菜单项或允许/禁止某些路由来授予或限制功能。 目前成功登录后,我的 .NET Core API 会返回一个 JWT token
我是 Angular 的新手,目前我已经看过 angular.io 网站提供的一些示例。但是在component decorator在文档中的解释,它指出 Angular components are
这里是service employee-service.service.ts的代码 import { Injectable } from '@angular/core'; import { HttpC
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
如何正确安装 PUG/JADE 到 Angular 2 或更高版本 这样在工作和 AOT 和 JiT 的同时 工作单元和集成测试 并且在创建每个新组件时不会受到太多影响 最佳答案 我看到了很多解决方案
我的 Angular 12 应用程序中有一些通用组件,我计划将其创建为一个 Angular 库,以便其他应用程序也可以使用它。我们有一些应用程序在较低版本的 angular(例如 angular 8/
tl;dr; ng build 删除了包含我编译的自定义库的/dist 文件夹。这会使我项目代码中对该库的所有引用无效,从而导致 ng build 最终失败。我做错了什么? 我关注了documenta
我正在将一些“遗留”(非 typescript )js 库导入到我的 Angular SPA 中。 通常我只是从 cdn 添加一个负载到 index.html 就像: 在 Angular 分量中我只
我有这个 angular 应用程序,它基本上使用了库的概念。 我有 2 个名为 的库Lib1 和 lib2 根据他们所服务的微服务分组。 现在我将这些库导入主应用程序,即 应用1 事情一直到现在。 现
我在我的项目中启用了 angular Universal。我现在想完全删除它。我试图删除以下文件 /server.ts /webpack.server.config.js /src/tsconfig.
我已经有一个 AuthService 在登录时对用户进行身份验证,并且 AuthGuard 在未登录的情况下阻止访问。 某些页面我通过 UserProfile/Role 限制访问,但现在我需要阻止页面
我正在尝试使用 angular、TypeORM、SQLite 和其他组件作为 webpack 构建 Electron 应用程序。 我从在 GitHub 上找到的示例开始我的开发:https://git
我在从 Angular 8 更新到 9 并运行时遇到以下错误 ng 更新@angular/material: Package "@angular/flex-layout" has an incompa
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在我的 h1 元素“之前”创建一个小的程式化三 Angular 形图案,但我无法正确地圆 Angular 。右上角没问题,但其他两个有剪裁问题。 这是输出以及形状的放大图像: 使用的代码如下: h
我有一个 Angular 元素,带有自定义标记名 - fancy-button。如何将 fancy-button 嵌入 Angular 应用程序? 我已经尝试了以下方法,但都没有用 - 在 index
我已将我的项目从 angular 5.2.9 升级到 angular 6.0.0-rc.5。 除了包路径中的几个快速 RxJS 修复外,一切看起来都不错。(此链接非常有用:Want to upgrad
我是一名优秀的程序员,十分优秀!