【问题标题】:How to serve Static WebSite content through Dot Net core Web APi in Azure如何在 Azure 中通过 Dot Net core Web APi 提供静态网站内容
【发布时间】:2020-08-05 12:14:28
【问题描述】:

我有一个在 Azure 中开发、部署和运行的 Dot Net Core Web API。它现在用作 API 网关。当用户在浏览器中点击 url 的根目录时,我想提供 HTML 内容。

我们的网站内容通过静态网站发布到 CDN 后面的 Azure 存储。我按照以下链接中的步骤进行了设置。

https://microsoft.github.io/AzureTipsAndTricks/blog/tip203.html

我们如何在我的 dot net core web api 中从 azure 存储中提供这些内容并将该内容返回到浏览器。

我有以下代码,适用于我在本地拥有的内容。

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();

            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
            });
        }

我应该在静态网站 blob 下读取 azure storage 的内容并将其返回还是只是重定向到静态网站或 CDN url。

我正在尝试按照下面答案 2 中的建议使用 ocelot 的架构

ASP.NET Core Api-Gateway middleware

【问题讨论】:

  • 是的,它从本地文件夹提供服务。静态文件存储在项目的 Web 根目录中。
  • I can change launchUrl value to: http://localhost:4343 to point it to root to return index html. But not sure how to return azure cdn content. 这句话是什么意思?您的意思是要将其发布到 Azure 进行托管?
  • 我已经将 react 项目的前端 SPA 静态文件发布到 azure storage -> 静态网站。当用户点击 dot net core api 的根目录时,我想返回该内容。
  • 您的意思是您已经为 api 创建了azure web app,并希望通过azure static web app 提供静态内容。

标签: c# azure .net-core asp.net-core-webapi


【解决方案1】:

你的问题描述的内容我个人试过了,先显示我的代码和upload it to github,你可以参考一下。并建议您阅读the offical document

//for wwwroot folder
app.UseStaticFiles();

//for wwwroot outside folder

app.UseStaticFiles(new StaticFileOptions
{
     FileProvider = new PhysicalFileProvider(
         Path.Combine(env.ContentRootPath, "StaticContent")),
     RequestPath = "/StaticContent"
});

我的项目结构:

编译选项,包括自定义文件夹。

项目的所有准备工作都已完成。以下是我对您的问题的建议:

  1. 如果您使用的是azure web app services,您可以直接使用项目访问API和静态资源。 如果你想使用cdn,可以在webapp中设置Networking,也可以实现你的需求。

  1. 如果单纯使用存储中的静态网站,那么我们的.net core项目好像不能直接在里面运行,应该是缺少运行环境(我的测试结果是这样的,和我还没有尝试过其他方法来解决它)。

    我的建议是,如果你真的需要使用存储中的静态资源文件来实现,那就把原来的静态资源文件复制进去,但是它们与访问api的链接URL是两个不同的URL。

总而言之,我建议试试我的方案,这对你肯定有很大帮助。

【讨论】:

    猜你喜欢
    • 2013-09-23
    • 2016-09-27
    • 2012-04-27
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2017-05-16
    相关资源
    最近更新 更多