ASP.NET Core根据文件的mime类型提供wwwroot
文件夹中的文件。但是如何让它提供没有扩展名的文件?
例如,Apple要求您在应用/apple-app-site-association
中设置一个端点,以便进行某些应用整合。如果您将名为apple-app-site-association的文本文件添加到wwwroot中,则无法正常工作。
我尝试过的一些事情:
1)提供没有扩展名的映射:
var provider = new FileExtensionContentTypeProvider();
provider.Mappings[""] = "text/plain";
app.UseStaticFiles(new StaticFileOptions
{
ContentTypeProvider = provider
});
2)添加应用程序重写:
var options = new RewriteOptions()
.AddRewrite("^apple-app-site-association","/apple-app-site-association.txt", false)
无论是否有效,唯一可行的是.AddRedirect
,如果可能的话,我不会使用它。
答案 0 :(得分:13)
添加替代解决方案。您必须将ServeUnknownFileTypes设置为true,然后设置默认内容类型。
app.UseStaticFiles(new StaticFileOptions
{
ServeUnknownFileTypes = true,
DefaultContentType = "text/plain"
});
答案 1 :(得分:6)
我认为你最好只为它创建一个控制器,而不是与静态文件作斗争:
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using System.IO;
namespace MyApp.Controllers {
[Route("apple-app-site-association")]
public class AppleController : Controller {
private IHostingEnvironment _hostingEnvironment;
public AppleController(IHostingEnvironment environment) {
_hostingEnvironment = environment;
}
[HttpGet]
public IActionResult Index() {
return Content(System.IO.File.ReadAllText(Path.Combine(_hostingEnvironment.WebRootPath,"apple-app-site-association")), "text/plain");
}
}
}
这假设您的apple-app-site-association
文件位于wwwroot文件夹中。
答案 2 :(得分:5)
一个更简单的选择可能是将具有适当扩展名的文件放在服务器上,然后按如下所示使用URL重写。
app.UseRewriter(new RewriteOptions()
.AddRewrite("(.*)/apple-app-site-association", "$1/apple-app-site-association.json", true));
答案 3 :(得分:3)
我认为最简单的方法是将 apple-app-site-association 文件添加到应用程序根文件夹中的 .well-known 文件夹中,如上所述此处:[https://developer.apple.com/documentation/safariservices/supporting_related_domains] 然后允许从您的代码访问它,如下所示 (Startup.cs):
// to allow access to apple-app-site-association file
app.UseStaticFiles(new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, @".well-known")),
RequestPath = new PathString("/.well-known"),
DefaultContentType = "application/json",
ServeUnknownFileTypes = true,
});
在 AWS 无服务器应用程序 (.NET Core 3.1) 中测试