【问题标题】:DotNet Controller to Return Static FileDotNet 控制器返回静态文件
【发布时间】:2019-10-01 15:43:26
【问题描述】:

我试图告诉控制器在某些情况下返回一个静态文件。我尝试了很多“Server.MapPath”对我不起作用的方法,所以我需要一个替代方法。我尝试了以下操作,但出现错误:

return File(Url.Content(startupPath), "text/javascript");

错误是:

InvalidOperationException: No file provider has been configured to process the supplied file.
Microsoft.AspNetCore.Mvc.Infrastructure.VirtualFileResultExecutor.GetFileInformation(VirtualFileResult result)

我有 app.UseStaticFiles() 和 app.UseSpaStaticFiles();都设置好了。

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller


    【解决方案1】:

    让控制器返回文件与启用静态文件或静态 spa 文件不同。

    静态文件:

    来自Static files in ASP.NET Core

    静态文件存储在项目的 Web 根目录中。默认目录是 /wwwroot。 (...) 应用程序的网络主机必须知道内容根目录。 (...) 静态文件可通过相对于 Web 根目录的路径访问。 (...) 访问子文件夹中文件的 URI 格式是 http:///subfolder/。

    使用app.UseStaticFiles() 将允许任何人从您的 wwwroot 目录中接收文件。

    这可能满足您的条件。如果没有,因为您可能希望在接收文件时添加身份验证或根据查询参数或当前用户从同一路由返回不同的文件,或者您需要生成文件,您需要从控制器返回文件.

    从控制器返回文件:

    这方面的微软文档不多,但stackoverflow上有很多问答。

    结帐:

    
    public ActionResult DownloadFile()
    {
        string filename = "File.pdf";
        string filepath = AppDomain.CurrentDomain.BaseDirectory + "/Path/To/File/" + filename;
        byte[] filedata = System.IO.File.ReadAllBytes(filepath);
        string contentType = MimeMapping.GetMimeMapping(filepath);
    
       var cd = new System.Net.Mime.ContentDisposition
        {
            FileName = filename,
            Inline = true,
        };
    
        Response.AppendHeader("Content-Disposition", cd.ToString());
    
        return File(filedata, contentType);
    }
    
    

    您的一个问题似乎还在于找到您要返回的文件。 您可以为此使用Server.MapPath("~/filename.ext")。通过在“复制到输出目录”的属性中选择“如果较新则复制”或“始终复制”,确保您的文件包含在已编译的项目中。

    【讨论】:

    • Server.MapPath 有什么替代方案吗?正如我在问题中提到的,我没有使用 System.Web,所以我不能使用服务器
    • 你可以试试AppDomain.CurrentDomain.BaseDirectory
    • 为我工作。但我不得不在 asp.net core 3.1 中使用Response.Headers.Add("Content-Disposition", cd.ToString());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 1970-01-01
    • 2020-04-09
    • 2014-06-24
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多