You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中如何访问bin文件夹外的项目文件?

解决ASP.NET Core MVC访问TempFiles文件夹静态文件问题

核心问题

ASP.NET Core默认仅对外暴露wwwroot目录下的静态资源,项目根目录下的TempFiles文件夹不在默认访问范围内,导致前端无法直接访问其中的file.wav文件。此外,前端代码中使用的相对路径../容易因页面URL层级变化导致路径解析错误。

解决步骤

1. 配置静态文件访问权限

在Program.cs中添加代码,将TempFiles文件夹注册为可访问的静态资源目录,并指定前端访问的路由前缀(比如/tempfiles):

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();

var app = builder.Build();

// 保留原有异常处理、路由等中间件配置

// 注册TempFiles为静态资源目录
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new PhysicalFileProvider(
        Path.Combine(builder.Environment.ContentRootPath, "TempFiles")),
    RequestPath = "/tempfiles" // 前端通过此路径访问文件夹内文件
});

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

2. 修正前端路径处理逻辑

移除不可靠的相对路径../,直接使用配置好的根路径前缀构造音频文件URL,同时避免重复绑定SignalR的ReceiveFile事件(原代码每次输入都会绑定一次,可能导致重复触发):

const connection = new signalR.HubConnectionBuilder().withUrl("/SandboxHub").build();

connection.start().catch(err => console.error(err));

$("#sentence-input").on("input", async function () {
    const sentence = $(this).val();
    await connection.invoke("TransformIntoTTS", sentence);
});

// 将事件绑定移到input事件外,避免重复绑定
connection.on("ReceiveFile", function (fileUrl) {
    // 处理后端返回的fileUrl:
    // 情况1:如果后端返回的是文件名(如"file.wav")
    const audioSrc = "/tempfiles/" + fileUrl;
    
    // 情况2:如果后端返回的是物理路径(如"D:\MyWebAPP\TempFiles\file.wav"),提取文件名
    // const fileName = fileUrl.split(/[\\/]/).pop();
    // const audioSrc = "/tempfiles/" + fileName;
    
    $("#audio-player").attr("src", audioSrc);
});

3. 检查SignalR后端返回的fileUrl格式

确保后端TransformIntoTTS方法返回的fileUrl是文件名或网站根相对路径,不要返回本地物理磁盘路径。例如后端可以返回"file.wav",而非Path.Combine(ContentRootPath, "TempFiles", "file.wav")。


内容的提问来源于stack exchange,提问作者CitrusBoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:15:36