如何始终为每个请求默认路由

时间:2016-03-14 15:20:33

标签: asp.net-mvc asp.net-core asp.net-core-mvc

我使用的是ASP.NET 5 / MVC 6,我正在托管一个AngularJS SPA。

我正在使用UI路由器,它工作正常,但当我刷新路由页面时,例如/customer/5我得到一个空白页面。我希望这是因为我还没有与该路线相关的路线/控制器。

理想情况下,在这种情况下,我希望MVC能够提供" index.html" (我的默认页面)包含我的所有AngularJS代码,然后让UI路由器显示正确的页面。

我该怎么做?以下是Configure

中当前Startup.cs函数的子集
app.UseMvc();
app.UseDefaultFiles();

app.UseStaticFiles();

2 个答案:

答案 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();