我已经阅读了数十个问题,但似乎没有一个对我有用。我没有使用 IIS。我将 ASP.Net Core 3.1 与 Kestrel 一起使用。
我有一个带有资源文件夹的 Razor 类库,因为我有 css、js、content 等文件夹。我使用这个库,所以我所有的公共 Web Api 项目都可以共享公共文件,而不是到处复制它们。为此,我遵循了 here 中的指南。请参阅此处了解如何配置 Startup。
效果很好,我可以通过转到例如访问这些文件str()
。在我的 cshtml 文件中,我可以通过执行 localhost/css/site.css
当我尝试从控制器访问这些文件时出现问题。我有一个名为 content 的 css 姊妹文件夹,其中包含 json 文件。我可以通过转到 <link rel="stylesheet" href="~/css/site.css"/>
查看该文件,但我不知道如何从控制器访问它。
我想做的是向 localhost/content/test.json
发出 HTTP 请求并下载其内容,但找不到路径。
我曾尝试使用 ~/content/test.json
将相对路径映射到绝对路径,但它不起作用。
Url.Content
我已将 var url = Url.Content("~/content/test.json"); // spits out "/content/test.json"
插入控制器并尝试访问 IWebHostEnvironment
和 ContentRootFileProvider
和 ContentRootPath
,但这些路径也不正确。它们分别指向我当前正在运行的服务的 wwwroot 的父级和 wwwroot。
我尝试创建自己的文件提供程序:
WebRootPath
这成功地找到了文件并声称它存在,但 var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, "resources");
var content = filesProvider.GetDirectoryContents("content");
var fileInfo = filesProvider.GetFileInfo(Path.Combine("content", "test.json"));
的 fileInfo
始终是 PhysicalPath
。
我只想做这样的事情:
null
我哪里出错了?任何指针表示赞赏。