Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回静态文件的DotNet控制器_C#_Asp.net Mvc_Model View Controller - Fatal编程技术网

C# 返回静态文件的DotNet控制器

C# 返回静态文件的DotNet控制器,c#,asp.net-mvc,model-view-controller,C#,Asp.net Mvc,Model View Controller,我试图告诉控制器在某种情况下返回一个静态文件。我尝试了很多方法Server.MapPath不适合我,所以我需要一个替代方案。我尝试了以下操作,但出现错误: return File(Url.Content(startupPath), "text/javascript"); 错误是: InvalidOperationException: No file provider has been configured to process the supplied file. Microsoft.AspN

我试图告诉控制器在某种情况下返回一个静态文件。我尝试了很多方法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.UseStaticFiles;两者都设置。

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

静态文件:

从:

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

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

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

从控制器返回文件:

关于这方面的微软文档并不多,但关于stackoverflow有很多问答

结帐:

公共操作结果下载文件 { 字符串文件名=File.pdf; 字符串filepath=AppDomain.CurrentDomain.BaseDirectory+/Path/To/File/+filename; byte[]filedata=System.IO.File.ReadAllBytesfilepath; 字符串contentType=MimeMapping.GetMimeMappingfilepath; var cd=new System.Net.Mime.ContentDisposition { FileName=FileName, Inline=true, }; Response.appendercontent-Disposition,cd.ToString; 返回filedata,contentType; } 您的问题之一似乎是找到要返回的文件。 您可以为此使用Server.MapPath~/filename.ext。通过在“复制到输出目录”的属性中选择“如果较新,则复制”或“始终复制”,确保您的文件包含在已编译的项目中


是否有Server.MapPath的替代方案。正如我在问题中提到的,我没有使用System.Web,所以我不能使用服务器。你可以试试AppDomain.CurrentDomain.BaseDirectoryworked。但是我必须使用Response.Headers.AddContent-Disposition,cd.ToString;在asp.net core 3.1中