Asp.net core mvc 为所有子路由提供静态文件
我用单页客户端构建了一个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,但它不适用于任何其他子路由 缺少什么?我将路由系统更改为属性路由。除此之外,我还添加了一个家
/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文件,希望避免额外的控制器等。