我正在尝试将我的ASP.NET Core 2.0 Angular 5
应用程序与webpack
setup 迁移到ASP.NET Core 2.1 Angular 6
with Angular-Cli
。
简短的问题:
如何从cshtml
with强制解析 razor pages 指令Microsoft.AspNetCore.SpaServices.Extensions
?
我不想使用index.html
from Angular.json
,但是index.cshtml
.
详细描述:
我从Angular 模板开始了一个新的 ASP.NET Core 项目。有很多东西可以神奇地起作用。
- 文件夹内有一个
index.html
文件,该文件ClientApp/src
在应用程序启动时自动提供。 - 当应用程序运行时,在标签
</body>
之前index.html
(从第一点开始)插入几个脚本:、、、inline.bundle.js
和标签之前。polyfills.bundle.js
vendor.bundle.js
main.bundle.js
styles.bundle.css
</head>
我不确定是谁插入了这些脚本,但我想将它们插入 Razor 页面 ( cshtml
)。
我尝试使用旧项目中的代码:
<!DOCTYPE html>
<html>
<head>
<base href="/" />
<title>@ViewData["Title"]</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
@{string googleAnalyticsId = Html.Raw(ViewData["GoogleAnalyticsId"]).ToString();}
@if (!string.IsNullOrEmpty(googleAnalyticsId))
{
<script>
(function(i, s, o, g, r, a, m)
{
...
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
ga('create', '@googleAnalyticsId', 'auto');
</script>
}
<script>
@Html.Raw(ViewData["TransferData"])
</script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/0.8.2/css/flag-icon.min.css" async defer />
<script src="https://apis.google.com/js/platform.js" async defer></script>
<app>
<!-- loading layout replaced by app after startupp -->
<div class="page-loading">
<div class="bar">
<i class="sphere"></i>
</div>
</div>
</app>
</body>
</html>
并将索引选项Angular.json
指向此index.cshtml
:
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "wwwroot/dist",
"index": "Views/Home/Index.cshtml", //<----- here
问题是 ASP.NET Core 不处理内容(所有 @ 标记),但它输出直接内容:
<!DOCTYPE html>
<html>
<head>
<base href="/" />
<title>@ViewData["Title"]</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
@{string googleAnalyticsId = Html.Raw(ViewData["GoogleAnalyticsId"]).ToString();}
@if (!string.IsNullOrEmpty(googleAnalyticsId))
{
<script>
...
但应该是:
<!DOCTYPE html>
<html>
<head>
<base href="/" />
<title>Test title</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<script>
我想将一些变量(来自 appsettings.json)打印到最后的 html 页面。由于我已经在使用 ASP.NET Core,因此 Razor 页面似乎是不错的解决方案。
我也尝试:
添加新的 RazorPage,处理 C# 内容(@指令),但没有人插入 Angular 脚本。
对 AndyCunningham 的回应:
ng build --prod
写这个文件:
<script type="text/javascript" src="runtime.b38c91f828237d6db7f0.js"></script><script type="text/javascript" src="polyfills.2fc3e5708eb8f0eafa68.js"></script><script type="text/javascript" src="main.16911708c355ee56ac06.js"></script>
到index.html
. 如何将此写入剃须刀页面。