按照苹果公司的要求 通用链接我有一个名为 "apple-app-site-association "的文件,它在azure的一个网站的根目录下。访问 mysite.comapple-app-site-association 应该在浏览器中返回 JSON 文本。我将网站托管在 Azure 上,并正在运行 Blazor 服务器项目。我的项目没有web.config文件。
要明确的是,"apple-app-site-association "文件的扩展名不应该是".json"
我还尝试修改Startup.cs中的Configure()方法,使之成为静态文件。
app.UseStaticFiles(new StaticFileOptions
{
ServeUnknownFileTypes = true,
DefaultContentType = "application/json"
});
虽然上面的代码确实能正确地为mysite.comapple-app-site-association提供服务,但它有一个不必要的副作用,即404'ing _frameworkblazor.server.js。
我如何修改apple-app-site-association的MIME类型,使我的Blazor服务器项目在访问mysite.comapple-app-site-association时能提供该文件?
或者,使用上面的UseStaticFiles()方法,当加载_frameworkblazor.server.js时,如何解决404错误?
在_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 Core应用程序,问题其实是关于ASP.NET Core、路由和如何处理静态文件的问题。
从中可以看出 本回答 可能最简单的方法是通过控制器来实现,而不是试图强迫路由器处理没有扩展名的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)在项目中设置了 "Copy if newer "的属性,所以它存在于 /bin
文件夹。