首页 文章

使用 ASP.Net Core MVC 和 ASP.Net Web Api 在 Angular2 App 中进行 HTML5 路由

提问于
浏览
4

我正在使用 ASP.Net Core MVC 和 ASP.Net Web Api 开发 Angular2 应用程序。

这是我的基本架构。

ASP.Net 核心 MVC 项目(MyProject.Web)

  • Nugetnpmbower用于依赖。 Bower用于将 npm 依赖项从node_modules复制到wwwroot/libs/

  • Home/Index controller 的动作提供第一页加载Angular2和其他依赖项。

  • 模板从 ActionMethods i.e 加载。 Home/About

  • SystemJS加载模块。

  • Angular2 的 http 服务调用 ASP.Net Web Api 项目(一个单独的项目而不是 mvc)

ASP.Net Web Api 项目(MyProject.Api) - 每个控制器被指定用于实体的 CRUD 操作,并响应 Angular2 的 http

问题:我无法使用 HTML5 路由并被迫散列路由,因为 html5 路由调用服务器而我的 MVC 项目没有相应的控制器。所以服务器不会返回任何内容。

3 回答

  • 1

    问题:我无法使用 HTML5 路由并被迫散列路由,因为 html5 路由调用服务器而我的 MVC 项目没有相应的控制器。所以服务器不会返回任何内容。

    在路径路径中添加#可能是像你这样的情况下最常见的解决方案,但......

    你有什么特别的理由在 Angular 中使用 MVC 吗?

    在我看来,你不需要 MVC - 你可以创建 ASP.NET 核心项目并添加到你的 HTML/Angular 应用程序 - 干净,简单,舒适,MVC 和 Angular 之间没有冲突;)

    将文件(包括index.html)添加到wwwroot并更新Startup.cs文件:

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
        }
    
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole();
    
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
                app.UseDefaultFiles(); <- Add this line before UseStaticFiles
                app.UseStaticFiles();            
        }
    }
    

    请找到更多信息:

  • 6

    如果您打算在 IIS 上使用,则可以使用 URL 重写模块。它基本上告诉 Web 服务器将所有路由 URL 重写为 index.html。 。

    <?xml version="1.0" encoding="utf-8"?>
    <system.webServer>
       <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule"
    resourceType="Unspecified"/>
       </handlers>
       <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
    stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"
    forwardWindowsAuthToken="false" />
          <rewrite>
             <rules>
                <rule name="Angular 2 pushState routing" stopProcessing="true">
                   <match url=".*" />
                   <conditions logicalGrouping="MatchAll">
                      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                      <add input="{REQUEST_FILENAME}" pattern=".*\.[\d\w]+$" negate="true" />
                      <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                   </conditions>
                   <action type="Rewrite" url="/index.html" />
                </rule>
             </rules>
          </rewrite>
       </system.webServer>
    </configuration>
    
  • 1

    “我无法使用 HTML5 路由并被迫散列路由,因为 html5 路由调用服务器而我的 MVC 项目没有相应的控制器。所以服务器不返回任何东西”

    https://github.com/aspnet/JavaScriptServices

    寻找路由助手也称为 spa 服务 nuget 和 spa 后备路由。

    如果没有找到服务器端路由并且路由没有文件扩展名,则应将 index.html 返回到客户端,其中当前路由被角度路由器解释为客户端路由。

相关问题