【发布时间】:2018-11-28 19:17:23
【问题描述】:
SpaPrerenderingExtensions 在 ASP.Net core 2.0 JavaScriptServices 中可用,似乎我们可以从 Angular (SSR) 应用程序返回 HTTP 状态码,SpaPrerenderingExtensions 将使用该应用程序将 HTTP 状态码返回给客户端.
如果你看看SpaPrerenderingExtensions下面的方法
private static async Task ServePrerenderResult(HttpContext context, RenderToStringResult renderResult)
SpaPrerenderingExtensions 的完整代码可在此处获得:https://github.com/aspnet/JavaScriptServices/blob/8ded472fe93123079ab97c9332f24460340876d2/src/Microsoft.AspNetCore.SpaServices.Extensions/Prerendering/SpaPrerenderingExtensions.cs
您会注意到renderResult.Html 包含从 Angular Server App 返回的 html 标记,而 renderResult.StatusCode.Value 包含状态代码。
启用 SSR 的官方文档(可在 https://docs.microsoft.com/en-us/aspnet/core/spa/angular?view=aspnetcore-2.1&tabs=visual-studio#server-side-rendering 获得)建议将以下代码添加到 main.server.ts 文件中。
import 'zone.js/dist/zone-node';
import 'reflect-metadata';
import { renderModule, renderModuleFactory } from '@angular/platform-server';
import { APP_BASE_HREF } from '@angular/common';
import { enableProdMode } from '@angular/core';
import { provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';
import { createServerRenderer } from 'aspnet-prerendering';
export { AppServerModule } from './app/app.server.module';
enableProdMode();
export default createServerRenderer(params => {
const { AppServerModule, AppServerModuleNgFactory, LAZY_MODULE_MAP } = (module as any).exports;
const options = {
document: params.data.originalHtml,
url: params.url,
extraProviders: [
provideModuleMap(LAZY_MODULE_MAP),
{ provide: APP_BASE_HREF, useValue: params.baseUrl },
{ provide: 'BASE_URL', useValue: params.origin + params.baseUrl }
]
};
const renderPromise = AppServerModuleNgFactory
? /* AoT */ renderModuleFactory(AppServerModuleNgFactory, options)
: /* dev */ renderModule(AppServerModule, options);
return renderPromise.then(html => ({ html }));
});
谁能指导我如何从 Angular 服务器应用程序返回状态代码,以便 ASP.Net Core 2.0 SpaPrerenderingExtensions 正确获取它。
任何帮助将不胜感激。例如,如果我有一个具有状态代码值的服务,我如何从该服务中选择值并传递给main.server.ts 文件中的服务器。
注意:我使用的是基于 ASP.Net Core 2.1 Angular CLI 6 的模板。
【问题讨论】:
标签: angular asp.net-core angular6 angular-universal asp.net-core-2.1