Обслуживание содержимого c без расширения файла в проекте сервера Blazor - PullRequest
1 голос
/ 26 апреля 2020

В соответствии с требованиями Apple для Universal Links , у меня есть файл «apple-app-site-association», который находится в папке root веб-сайта в azure. Посещение mysite.com/apple-app-site-association должно вернуть текст JSON в браузере. Я размещаю сайт на Azure и работаю над проектом сервера Blazor. Мой проект не имеет файла web.config.

Для ясности, файл "apple-app-site-association" не должен иметь расширение ". json"

Я рассмотрел это решение и это решение .

Я также попытался изменить метод Configure () в Startup.cs для обслуживания stati c файлов

app.UseStaticFiles(new StaticFileOptions
{
    ServeUnknownFileTypes = true,
    DefaultContentType = "application/json"
});

Хотя приведенный выше код корректно обслуживает mysite.com/apple-app-site-association, он имеет нежелательный побочный эффект 404-й _framework / blazor.server. js.

Как я могу изменить MIME-тип ассоциации apple-app-site-site, чтобы мой серверный проект Blazor обслуживал файл при посещении mysite.com/apple-app-site-association?

Или, используя метод UseStaticFiles () выше, как я могу устранить ошибку 404 при загрузке _framework / blazor.server. js?

В _Host.cs html

<!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>

1 Ответ

2 голосов
/ 26 апреля 2020

Несмотря на то, что вы используете Blazor, оно по-прежнему является ASP. NET Базовым приложением в основе, и проблема действительно заключается в ASP. NET Ядре, маршрутизации и способах обработки файлов stati c. .

Как видно из этого ответа , вероятно, проще всего сделать это через контроллер, а не пытаться заставить маршрутизатор обрабатывать 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 extension) находится в проекте с установленным свойством «Копировать, если новее», поэтому оно присутствует в папке /bin.

Running: enter image description here

...