Angular2的預設route模式是html5,這個在跑到其他頁面後,在重新整理頁面後會出現空白頁面,這是因為找不到Index的入口了。所以解決方式就是要讓MVC Core可以每次都載入Index.html頁面(如果純靜態頁面的方式)
在startup.cs的Configure function, 加入以下程式碼
1 2 3 4 5 6 7 8 9 10 11
| app.Use(async (context, next) => { if (!Path.HasExtension(context.Request.Path.Value) && context.Request.HttpContext.Request.Headers["X-Custom-Header"] != "api" && context.Request.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest") { await context.Response.WriteAsync(System.IO.File.ReadAllText("index.html")); } await next(); });
|
在Angular2的index.ts裡設定讓所有的request的header都新增 X-Custom-Header=api,讓server判斷是否為api call
1 2 3 4 5 6 7 8 9 10 11
| import { HTTP_PROVIDERS, BaseRequestOptions, RequestOptions, Headers } from 'angular2/http';
class requestOption extends BaseRequestOptions { headers: Headers = new Headers({ 'X-Custom-Header': 'api' }); }
bootstrap(CkDemoApp, [ ... provide(RequestOptions, { useClass: requestOption }) ]);
|
這樣子就可以讓Angular2跑到不同頁面時,不會因為重新整理而出現空白的畫面
如果是用Controller/View的方式,設定方法比照舊的設定方式即可