出于安全原因,我们必须坚持使用 ASP.NET MVC5。这就是为什么我们必须构建前端 Angular 应用程序并使用它BundleConfig
来打包和抓取所有内容。对于视图,我们为 Angular App 建立了一个视图占位符。
是的,我同意这很丑。但是,这似乎是我们的最佳解决方案。
这是问题所在:当我尝试加载静态文件时。(例如图像、json 文件)我们必须从 mvc5 后端获取它们。
我尝试将静态文件移动到 angular assets 文件夹,一切都成功编译并复制到 dist 文件夹。但是,使用相对路径,Angular 无法识别它们。
这是错误:
您可能知道,我们的 Angular 应用程序的根源是:http://localhost:1220/client
绝对 json 文件位置是:'http://localhost:1220/client/dist/assets/data/UiData.json'
这是我的 Angular 服务:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs/observable';
@Injectable()
export class LocalDataService {
private staticDataURL = '../../../assets/data/UiData.json';
// private staticDataURL = 'assets/data/UiData.json';
constructor(private http: HttpClient) { }
public getJSON(): Observable<any> {
return this.http.get(this.staticDataURL);
}
}
这两种路径都不适用于这种情况'../../../assets/data/UiData.json'
,'assets/data/UiData.json'
因为服务器无法识别前端 Angular 应用程序。
这是来自我们 MVC5 后端的 BundleConfig:
public class BundleConfig
{
// For more information on bundling, visit https://go.microsoft.com/fwlink/?LinkId=301862
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/script/bundle").Include("~/Scripts/dist/bundle.js"));
bundles.Add(new StyleBundle("~/style/main").Include("~/Scripts/dist/style.css", new CssRewriteUrlTransform()));
// Angular build artifacts
bundles.Add(new ScriptBundle("~/script/report-bundle").Include(
"~/client/dist/runtime.*",
"~/client/dist/polyfills.*",
"~/client/dist/scripts.*",
"~/client/dist/main.*"
));
bundles.Add(new StyleBundle("~/style/report-style")
.Include(
"~/client/dist/styles.*",
new CssRewriteUrlTransform()
));
}
}
在这种情况下,有没有办法使用相对路径加载本地 json 文件?
提前致谢!