在Blazor服务器项目上提供不带文件扩展名的静态内容 [英] Serving static content without a file extension on a Blazor server project

查看:37
本文介绍了在Blazor服务器项目上提供不带文件扩展名的静态内容的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据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 solutionthis 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆