我使用的是ASP.NET 5 / MVC 6,我正在托管一个AngularJS SPA。
我正在使用UI路由器,它工作正常,但当我刷新路由页面时,例如/customer/5
我得到一个空白页面。我希望这是因为我还没有与该路线相关的路线/控制器。
理想情况下,在这种情况下,我希望MVC能够提供" index.html" (我的默认页面)包含我的所有AngularJS代码,然后让UI路由器显示正确的页面。
我该怎么做?以下是Configure
Startup.cs
函数的子集
app.UseMvc();
app.UseDefaultFiles();
app.UseStaticFiles();
答案 0 :(得分:5)
在管道中的MVC之前添加自定义中间件来处理所有非ajax和非静态文件请求。
$filter = explode(",", $filter_values);
for ($i = 0; $i < count($filter); $i++) {
$filter[$i] = trim(mb_strtolower($filter[$i]));
}
$replacements = array_merge($values, $custom_replacements);
foreach ($replacements as $key => $value) {
if (!in_array(mb_strtolower($key), $filter) && !is_array($value)) {
$html = str_replace('{' . $key . '}', $replacements[$key], $html);
}
}
答案 1 :(得分:1)
使用Asp.net核心1.1 web api&amp;时遇到同样的问题。 SPA(从CLI创建React-Redux)单独。 我将SPA作为静态文件托管在wwwroot文件夹
中以下代码适用于我。
app.UseDefaultFiles();
app.UseStaticFiles();
app.Use(async (context, next) =>
{
if (!context.Request.Path.Value.Contains("/api"))
{
context.Response.Redirect("/");
//context.Response.Redirect($"/#{context.Request.Path.Value}");
return;
}
await next();
});
app.UseMvc();