当前位置: 首页 > 面试题库 >

如何将除Web API之外的所有内容路由到/index.html

长孙和悦
2023-03-14
问题内容

我一直在使用Web API在ASP.NET MVC内从事 AngularJS
项目。它非常有用,除非您尝试直接转到有角度的路由URL或刷新页面。我认为可以使用 MVC的路由引擎 来处理服务器配置,而不是胡闹。

当前的WebAPIConfig:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional },
            constraints: new { id = @"^[0-9]+$" }
        );

        config.Routes.MapHttpRoute(
            name: "ApiWithActionAndName",
            routeTemplate: "api/{controller}/{action}/{name}",
            defaults: null,
            constraints: new { name = @"^[a-z]+$" }
        );

        config.Routes.MapHttpRoute(
            name: "ApiWithAction",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { action = "Get" }
        );
    }
}

当前的RouteConfig:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute(""); //Allow index.html to load
        routes.IgnoreRoute("partials/*"); 
        routes.IgnoreRoute("assets/*");
    }
}

当前的Global.asax.cs:

public class WebApiApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        var formatters = GlobalConfiguration.Configuration.Formatters;
        formatters.Remove(formatters.XmlFormatter);
        GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
        {
            Formatting = Formatting.Indented,
            PreserveReferencesHandling = PreserveReferencesHandling.None,
            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
        };
    }
}

目标:

/ api / *继续转到WebAPI,/ partials / 和/ assets /
都转到文件系统,其他所有内容都路由到/index.html,这是我的Angular单页应用程序。

- 编辑 -

我似乎已经开始工作了。将此添加到RouteConfig.cs 的 底部

 routes.MapPageRoute("Default", "{*anything}", "~/index.html");

并将此更改更改为根web.config:

<system.web>
...
  <compilation debug="true" targetFramework="4.5.1">
    <buildProviders>
      ...
      <add extension=".html" type="System.Web.Compilation.PageBuildProvider" /> <!-- Allows for routing everything to ~/index.html -->
      ...
    </buildProviders>
  </compilation>
...
</system.web>

但是,它闻起来像黑客一样。还有更好的方法吗?


问题答案:

使用通配符段:

routes.MapRoute(
    name: "Default",
    url: "{*anything}",
    defaults: new { controller = "Home", action = "Index" }
);


 类似资料:
  • 我想知道如何使用正则表达式删除除所有图像标记之外的所有内容。 我已经试过了: (?s)^[^ (?s)^([^ 有谁知道如何将这 2 个组合为多个图像? 下面是我想应用它的内容示例: 我期望的结果应该是:

  • 问题内容: 我要删除所有密钥。我希望一切都消灭,然后给我一个空白的数据库。 有没有办法在Redis客户端中做到这一点? 问题答案: 使用redis-cli: FLUSHDB –从连接的当前数据库中删除所有密钥。 FLUSHALL –从所有数据库中删除所有键。 例如,在您的shell中:

  • 我有一个Quarkus应用程序,它都包了一个角水疗(捆绑在罐子里)。Quarkus提供后端API路由供前端使用。在构建Quarkus应用程序时,将Angular应用程序构建复制到目标中的路径。 我没有使用JAX-RS来注册路由。相反,我直接在Vertx路由器上的方法中以编程方式注册它们。 我希望任何不被识别的路由(无论是作为Vertx注册的路由还是静态资源)被重新定向到,以便我的Angular应用

  • 问题内容: 我正在制作Angular + NestJS应用,我想发送所有路线的文件。 主要 应用控制器 打开时它工作正常,但是如果打开,服务器随即提示。我一直在搜寻为什么我会收到此错误,而所有人都说,但是我不想使用某些引擎,我只想发送由angular构建的纯html,而不会像hack一样。请帮忙 问题答案: 您只能使用并与像车把(HBS)视图引擎; 用于提供静态文件(角度),但是,您只能使用和。

  • 问题内容: 我有一个Struts2(2.1.8.1)Web应用程序。我的web.xml看起来像 它被配置为将所有请求映射到struts过滤器。我想在我的Web应用程序中添加一个servlet。我想将所有带有特定url模式的请求发送到该servlet。我希望其他所有内容都进入我的struts servlet。 我知道我只能将“ * .action”映射到struts servlet,但是我讨厌.ac

  • 我有一张地图,如下所示: