在Blazor服务器项目上提供不带文件扩展名的静态内容 [英] Serving static content without a file extension on a Blazor server project
问题描述
根据Apple对Universal Links的要求,我有一个名为"Apple-app-site-Association"的文件,它位于Azure网站的根文件夹中。访问mysite.com/Apple-app-site-Association应该会在浏览器中返回JSON文本。我在Azure上托管网站,并运行Blazor服务器项目。我的项目没有web.config文件。
明确地说,文件"Apple-app-Site-Association"不应该有扩展名".json"
我已经查看了this solution和this solution。
我还尝试修改Startup.cs中的configuration()方法以提供静态文件
app.UseStaticFiles(new StaticFileOptions
{
ServeUnknownFileTypes = true,
DefaultContentType = "application/json"
});
虽然上面的代码确实正确地服务于mysite.com/Apple-app-Site-Association,但它有一个不想要的副作用404‘ing_framework/blazor.server.js。
如何修改Apple-app-Site-Association的MIME类型,以便我的Blazor服务器项目在访问mysite.com/Apple-app-Site-Association时提供文件?
或者,使用上面的UseStaticFiles()方法,如何解决装入_framework/blazor.server.js时出现的404错误?
In_Host.cshtml
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<base href="~/" />
<link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />
<link href="css/site.css" rel="stylesheet" />
<link rel="stylesheet" href="_content/Radzen.Blazor/css/default.css" />
</head>
<body>
...some stuff...
<script src="_framework/blazor.server.js"></script>
</body>
</html>
推荐答案
虽然您正在使用Blazor,但它本质上仍然是一个ASP.NET核心应用程序,问题实际上是关于ASP.NET核心、路由和如何处理静态文件。
如this answer中所示,通过控制器完成此操作可能是最简单的,而不是试图强制路由器处理没有扩展名的URL。我还在一个项目中为robots.txt
执行了此操作,以控制不同品牌的显示内容。
我尝试过:
public class StaticContentController : Controller
{
[HttpGet]
[Route("apple-app-site-association")]
public ContentResult AppleAppSiteAssociation()
{
// source in root of wwwroot folder
const string source = @"apple-app-site-association.json";
string json = System.IO.File.ReadAllText(source);
return Content(json, "application/json", Encoding.UTF8);
}
}
源文件(扩展名为.json)位于项目中,并且设置了"较新时复制"属性,因此它位于/bin
文件夹中。
这篇关于在Blazor服务器项目上提供不带文件扩展名的静态内容的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!