【问题标题】:Static files on asp.net coreasp.net core 上的静态文件
【发布时间】:2018-02-28 16:20:30
【问题描述】:

我正在尝试在 ASP.NET Core 2.0 Web 应用程序上启用静态文件。我在一个名为 updater 的文件夹中有一堆文件,它位于 wwwroot 文件夹之外。为了允许访问它们,我添加了

app.UseStaticFiles(new StaticFileOptions()
{
    ServeUnknownFileTypes = true,
    FileProvider = new PhysicalFileProvider(
        Path.Combine(Directory.GetCurrentDirectory(), @"TestUpdater")
    ),
    RequestPath = new PathString("/Updater")
});

这让不同的程序能够通过调用 url 来获取它的文件。问题是所有文件都需要下载而不是提供。有一个txt文件。我如何只允许下载而不是提供服务?

【问题讨论】:

    标签: c# asp.net-core static-files


    【解决方案1】:

    您描述的“服务”和“下载”文件之间的唯一区别是,在一种情况下,浏览器会将文件下载到临时位置并将其显示在窗口中(内联),而另一种情况下浏览器会询问用户将文件保存到永久位置的位置(附件)。

    如果您所指的其他程序直接与服务器联系以获取这些文件,则无关紧要。例如使用 HttpClient,你根本不需要改变你的静态文件中间件。

    如果您希望浏览器提示用户保存文件,即使它是可识别的内容类型,请尝试将 Content-Disposition 响应标头设置为“附件”。要从您的 Startup.cs 配置中执行此操作,请修改您的 StaticFileOptions 以使用如下内容:

    new StaticFileOptions()
    {
        OnPrepareResponse = context =>
        {
            context.Context.Response.Headers["Content-Disposition"] = "attachment";
        }
    }
    

    【讨论】:

    • 就是这样。我实际上也有一个 php 文件,需要执行,我认为“服务”是问题所在。问题仍然存在,我需要做些什么才能让静态 php 文件被允许执行吗?
    • @Ratan 您需要让 PHP 运行该文件。您在服务器上运行 PHP 吗? (对我来说,这听起来像是一个非常奇怪的架构。)
    • 是的,当文件从同一服务器上的非核心站点提供时,PHP 正在运行。是的,我同意,是的。我计划在未来更改它,但现在不能,因为我正在将现有的非核心升级到核心,并且需要维护一些旧文件,直到我们真正将它们从那里移出。
    • 另外,使用 UseStaticFiles 提供这些文件的好处是什么,如果我有多个文件夹,如 updater1、updater2 等。我是否需要使用新的为它们单独调用 UseStaticFiles路径字符串?
    • 我猜你回答了当前的问题,而php部分是一个新问题。我将关闭它并提出一个新问题。谢谢!
    最近更新 更多