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

.NET Core 3.1 MVC Razor页audio控件播放UNC音频按钮置灰问题

根本原因

直接在<audio>标签的src属性中填写UNC格式的SMB共享路径无法正常加载,是Chrome等现代浏览器的默认安全策略限制:通过HTTP/HTTPS协议加载的网页,默认禁止直接访问本地文件系统、局域网SMB共享这类非HTTP源的资源,该限制不受站点内容权限、HTTPS证书有效性影响。

手动将UNC路径输入浏览器地址栏可正常播放,是因为此时浏览器直接通过SMB协议发起资源请求,不受网页上下文的安全沙箱规则约束,二者的权限判定逻辑完全独立。

可行解决方案

方案1:后端接口代理文件流(推荐,适配性最好)

不让浏览器直接访问UNC共享资源,由.NET Core后端读取共享路径下的音频文件,以标准HTTP文件流的形式返回给前端,audio标签直接引用本站点的接口地址即可。

  1. 在对应的Razor Page Model(playerModel.cshtml.cs)中新增接口处理方法:
public IActionResult OnGetGetAudio()
{
    // 替换为实际的音频文件UNC路径
    string audioUncPath = @"\\server.local\shares\folderone\subfolder\vendor\sample.mp3";
    var fileStream = new FileStream(audioUncPath, FileMode.Open, FileAccess.Read);
    // 开启RangeProcessing支持音频进度拖动
    return File(fileStream, "audio/mpeg", enableRangeProcessing: true);
}
  1. 修改Razor页面中的audio标签,将src指向本站接口:
<audio controls src="/player?handler=GetAudio"></audio>

方案2:将UNC共享目录挂载为站点静态资源目录

如果所有录音文件都存放在固定的共享目录下,可以直接将该UNC目录配置为.NET Core的静态文件服务目录,由站点统一对外提供该路径下的资源访问。

  1. 在项目Startup.cs的Configure方法中新增静态文件配置:
using Microsoft.Extensions.FileProviders;

// 省略其他已有配置
app.UseStaticFiles(new StaticFileOptions
{
    // 配置UNC共享路径作为文件源
    FileProvider = new PhysicalFileProvider(@"\\server.local\shares\folderone\subfolder\vendor"),
    // 配置访问路径前缀
    RequestPath = "/recording-files",
    ContentTypeProvider = new FileExtensionContentTypeProvider
    {
        Mappings = { [".mp3"] = "audio/mpeg" }
    }
});
  1. 修改audio标签引用静态资源路径即可:
<audio controls src="/recording-files/sample.mp3"></audio>
注意事项
  • 无论使用哪种方案,都需要确保运行.NET Core进程的账号(本地调试时为当前登录系统的账号,IIS部署时为应用池配置的运行身份)对目标UNC共享目录拥有读取权限,否则会出现访问拒绝、资源404的错误。
  • 返回音频流时必须开启enableRangeProcessing配置,否则audio控件会出现无法拖动播放进度、加载异常的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:00:54