Asp.net core mvc 为所有子路由提供静态文件

Asp.net core mvc 为所有子路由提供静态文件,asp.net-core-mvc,Asp.net Core Mvc,我用单页客户端构建了一个MVC核心应用程序 我已经为/api/…配置了一些路由,效果很好。此外,我想为一些路由提供静态文件。e、 g: 对于/Home/的所有子路由,我希望接收/Home/index.html 对于/App/的所有子路由,我希望接收/App/index.html 我将app.UseStaticFiles()添加到Configure(),这样我就可以访问/Home/index.html,但它不适用于任何其他子路由 缺少什么?我将路由系统更改为属性路由。除此之外,我还添加了一个家

我用单页客户端构建了一个MVC核心应用程序

我已经为
/api/…
配置了一些路由,效果很好。此外,我想为一些路由提供静态文件。e、 g:

  • 对于
    /Home/
    的所有子路由,我希望接收
    /Home/index.html
  • 对于
    /App/
    的所有子路由,我希望接收
    /App/index.html
我将
app.UseStaticFiles()
添加到
Configure()
,这样我就可以访问
/Home/index.html
,但它不适用于任何其他子路由


缺少什么?

我将路由系统更改为属性路由。除此之外,我还添加了一个
家庭控制器

[Route("")]
public class HomeController : Controller
{
    [Route("")]
    public IActionResult Index()
    {
        return View(); // The Home-page
    }

    [Route("Error")]
    public IActionResult Error()
    {
        // show an error page
        return Content(Activity.Current?.Id?.ToString() ?? HttpContext.TraceIdentifier.ToString());
    }

    [Route("{client}/{*tail}")]
    [Produces("text/html")]
    public IActionResult ClientApp(string client, string tail)
    {
        // show a client app
        try
        {
            return new ContentResult()
            {
                Content = System.IO.File.ReadAllText($"./wwwroot/{client}/index.html"),
                ContentType = "text/html"
            };
        }
        catch
        {
            return RedirectToAction("/Error");
        }
    }
}
我的客户端应用程序在其自己的文件夹(
client
routing部分)的
wwwroot
中有一个
index.html
文件。当请求尝试访问
/something/..
时,
ClientApp
的路径与
something
匹配,作为客户端应用程序文件夹名称,并且
index.html
被发送到客户端。没有重定向,url保持不变

如果在
启动
中添加
usesticfiles
之前添加
AddMvc
,则静态文件不会出现问题:

app.UseStaticFiles();
app.UseMvc();

在ASP.NET MVC Core 2.0中测试。

如果您使用ASP.NET Core 2.0,请尝试使用Razor pages作为静态页面@艾哈迈尔:我知道剃须刀页面,但我不知道它对我有什么帮助。我得到一个工具生成的HTML文件,希望避免额外的控制器等。