传统 WebForms / MVC (使用 HTML5 <video>
这是最直接、最通用的方法,适用于所有 .NET Web 项目,核心是使用 HTML5 原生的 <video> 标签,并通过 C# 代码将视频文件路径传递给前端。
(图片来源网络,侵删)
核心思想
- 后端 (C#):将视频文件存放在项目的特定目录下(如
wwwroot/videos/)。
- 后端 (C#):创建一个 Action (MVC) 或 Page (WebForms),该 Action/Page 的职责是返回一个视图,并将视频的 URL 或相对路径传递给视图。
- 前端 (HTML/JavaScript):在视图中,使用
<video> 标签,并利用 Razor 语法将后端传递的路径动态设置给 src 属性。
步骤详解
项目准备
- 创建一个新的 ASP.NET Web 应用(使用 MVC 模板)。
- 在
wwwroot 文件夹下创建一个名为 videos 的文件夹。
- 将你的视频文件(
my-video.mp4)放入 wwwroot/videos/ 文件夹中。
后端代码 (MVC 示例)
在 Controllers 文件夹下创建一个控制器,VideoController.cs。
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
namespace YourAppName.Controllers
{
public class VideoController : Controller
{
// Action 方法,返回一个视图,并传递视频路径
public IActionResult Player()
{
// 获取视频文件的相对路径
// Path.Combine 是一个好习惯,可以确保路径在不同操作系统下都正确
string videoPath = "/videos/my-video.mp4";
ViewBag.VideoPath = videoPath; // 使用 ViewBag 将数据传递给视图
return View();
}
}
}
- WebForms 示例:
在
Pages 文件夹下创建一个 Web 窗体,VideoPlayer.aspx。
在代码后端 VideoPlayer.aspx.cs 中:protected void Page_Load(object sender, EventArgs e)
{
string videoPath = "/videos/my-video.mp4";
// 将路径存储在 ViewState 或直接在 Page_Load 中设置控件的属性
}
前端代码 (Razor View)
在 Views/Video 文件夹下创建一个视图 Player.cshtml。
@{
ViewData["Title"] = "视频播放器";
}
<h2>本地视频播放器</h2>
<!-- 使用 Razor 语法 @ViewBag.VideoPath 动态设置 src -->
<video width="800" controls autoplay muted>
<source src="@ViewBag.VideoPath" type="video/mp4">
您的浏览器不支持 HTML5 视频标签。
</video>
<p>视频文件路径: @ViewBag.VideoPath</p>
-
WebForms 示例 (VideoPlayer.aspx):
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="VideoPlayer.aspx.cs" Inherits="YourAppName.VideoPlayer" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>视频播放器</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<!-- 在 Page_Load 中,你需要通过代码找到这个 Label 并设置其 Text 属性 -->
<!-- VideoPathLabel.Text = videoPath; -->
<asp:Label ID="VideoPathLabel" runat="server" Text="" Visible="false"></asp:Label>
<video width="800" controls>
<source src="<%= VideoPathLabel.Text %>" type="video/mp4">
您的浏览器不支持 HTML5 视频。
</video>
</div>
</form>
</body>
</html>
运行和访问
- 运行你的 .NET 应用。
- 在浏览器中访问
https://localhost:xxxx/Video/Player (xxxx 是你的端口号)。
你应该能看到一个功能完整的视频播放器,可以播放你放在 wwwroot/videos 目录下的视频。
(图片来源网络,侵删)
现代 Blazor 方式
Blazor 是 .NET 的现代 Web UI 框架,它允许你使用 C# 而不是 JavaScript 来构建交互式客户端 Web UI,实现本地视频播放非常优雅。
核心思想
Blazor 的组件化思想和数据绑定机制使得这个过程非常简洁,你只需要在组件中放置一个 <video> 标签,并通过 @bind 或直接设置 src 属性即可。
步骤详解
项目准备
- 创建一个新的 Blazor Server 或 Blazor WebAssembly 应用。
组件代码 (Razor Component)
在 Pages 文件夹下(或 Shared/Components 文件夹),创建一个名为 VideoPlayer.razor 的组件。
@* VideoPlayer.razor *@
@page "/video-player"
<h3>Blazor 本地视频播放器</h3>
@*
直接在 <source> 标签的 src 属性中使用 C# 字符串。
Blazor 会自动将其渲染到最终的 HTML 中。
*@
<video width="800" controls autoplay muted>
<source src="/videos/my-video.mp4" type="video/mp4">
您的浏览器不支持 HTML5 视频标签。
</video>
<p>视频文件路径: /videos/my-video.mp4</p>
更高级的用法:通过参数传递视频路径
(图片来源网络,侵删)
为了让组件更可复用,你可以通过 @parameter 将视频路径作为参数传入。
@* VideoPlayerReusable.razor *@
@* 定义一个参数,用于接收视频源 *@
@parameter string VideoSource { get; set; }
<h3>可复用的视频播放器</h3>
<video width="800" controls autoplay muted>
<source src="@VideoSource" type="video/mp4">
您的浏览器不支持 HTML5 视频标签。
</video>
<p>当前播放视频: @VideoSource</p>
然后在其他页面(如 Index.razor)中使用这个组件:
@* Index.razor *@
@page "/"
<h1>欢迎使用 Blazor!</h1>
<p>下面是一个可复用的视频播放器组件:</p>
@* 调用可复用组件,并传入视频路径 *@
<VideoPlayerReusable VideoSource="/videos/another-video.mp4" />
运行和访问
- 运行 Blazor 应用。
- 导航到
/video-player 或首页,即可看到视频播放器。
关键点和最佳实践
-
视频格式:并非所有浏览器都支持所有视频格式。mp4 (H.264 编码) 是目前兼容性最好的选择,你可以提供多个 <source> 标签来支持不同格式。
<video controls>
<source src="video.mp4" type="video/mp4">
<source src="video.webm" type="video/webm">
<source src="video.ogv" type="video/ogg">
</video>
-
wwwroot 文件夹:在 .NET 中,wwwroot 是网站的“根”文件夹,所有放在这里的静态文件(如 CSS, JS, 图片, 视频)都可以通过 URL 直接访问。wwwroot/videos/my-video.mp4 的 URL /videos/my-video.mp4。
-
路径:
- 在 C# 代码中构建路径时,使用
Path.Combine 是一个好习惯。
- 在 HTML 的
src 属性中,路径是相对于网站根目录的,所以以 开头是正确的。
-
控件属性:
controls: 显示播放器控件(播放、暂停、音量、进度条等)。
autoplay: 视频加载后自动播放。注意:许多浏览器(特别是移动端)为了节省流量和提升用户体验,会阻止 autoplay,除非视频是静音的 (muted)。
muted: 视频静音。
width / height: 设置播放器尺寸。
-
流式传输 (Streaming):对于非常大的视频文件,直接使用 <video> 标签下载整个文件再播放体验很差,在生产环境中,通常会使用 MPEG-DASH 或 HLS 等流媒体技术。.NET 有一些库(如 NReco.VideoConverter)可以帮助你将视频转换为这些格式,或者你可以使用专门的流媒体服务器(如 Wowza, Media Services)。
特性
传统 MVC/WebForms
现代 Blazor
技术核心
HTML5 <video> + Razor 语法
HTML5 <video> + C# 组件化
实现复杂度
简单,直接
非常简洁,代码量少
可复用性
需要手动创建部分视图或用户控件
天然支持组件化,易于复用
数据绑定
通过 ViewBag, ViewData 或服务器控件事件
强大的 @bind 和 C# 属性绑定
适用场景
所有 .NET Web 项目,特别是已有 MVC/WebForms 项目
新项目,追求现代开发体验,C# 全栈开发
对于新项目,强烈推荐使用 Blazor,它提供了更流畅的开发体验和更强的代码组织能力,对于维护旧项目,传统的 MVC/WebForms 方式依然是可靠且有效的选择。
这是最直接、最通用的方法,适用于所有 .NET Web 项目,核心是使用 HTML5 原生的 <video> 标签,并通过 C# 代码将视频文件路径传递给前端。

核心思想
- 后端 (C#):将视频文件存放在项目的特定目录下(如
wwwroot/videos/)。 - 后端 (C#):创建一个 Action (MVC) 或 Page (WebForms),该 Action/Page 的职责是返回一个视图,并将视频的 URL 或相对路径传递给视图。
- 前端 (HTML/JavaScript):在视图中,使用
<video>标签,并利用 Razor 语法将后端传递的路径动态设置给src属性。
步骤详解
项目准备
- 创建一个新的 ASP.NET Web 应用(使用 MVC 模板)。
- 在
wwwroot文件夹下创建一个名为videos的文件夹。 - 将你的视频文件(
my-video.mp4)放入wwwroot/videos/文件夹中。
后端代码 (MVC 示例)
在 Controllers 文件夹下创建一个控制器,VideoController.cs。
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
namespace YourAppName.Controllers
{
public class VideoController : Controller
{
// Action 方法,返回一个视图,并传递视频路径
public IActionResult Player()
{
// 获取视频文件的相对路径
// Path.Combine 是一个好习惯,可以确保路径在不同操作系统下都正确
string videoPath = "/videos/my-video.mp4";
ViewBag.VideoPath = videoPath; // 使用 ViewBag 将数据传递给视图
return View();
}
}
}
- WebForms 示例:
在
Pages文件夹下创建一个 Web 窗体,VideoPlayer.aspx。 在代码后端VideoPlayer.aspx.cs中:protected void Page_Load(object sender, EventArgs e) { string videoPath = "/videos/my-video.mp4"; // 将路径存储在 ViewState 或直接在 Page_Load 中设置控件的属性 }
前端代码 (Razor View)
在 Views/Video 文件夹下创建一个视图 Player.cshtml。
@{
ViewData["Title"] = "视频播放器";
}
<h2>本地视频播放器</h2>
<!-- 使用 Razor 语法 @ViewBag.VideoPath 动态设置 src -->
<video width="800" controls autoplay muted>
<source src="@ViewBag.VideoPath" type="video/mp4">
您的浏览器不支持 HTML5 视频标签。
</video>
<p>视频文件路径: @ViewBag.VideoPath</p>
-
WebForms 示例 (
VideoPlayer.aspx):<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="VideoPlayer.aspx.cs" Inherits="YourAppName.VideoPlayer" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>视频播放器</title> </head> <body> <form id="form1" runat="server"> <div> <!-- 在 Page_Load 中,你需要通过代码找到这个 Label 并设置其 Text 属性 --> <!-- VideoPathLabel.Text = videoPath; --> <asp:Label ID="VideoPathLabel" runat="server" Text="" Visible="false"></asp:Label> <video width="800" controls> <source src="<%= VideoPathLabel.Text %>" type="video/mp4"> 您的浏览器不支持 HTML5 视频。 </video> </div> </form> </body> </html>
运行和访问
- 运行你的 .NET 应用。
- 在浏览器中访问
https://localhost:xxxx/Video/Player(xxxx 是你的端口号)。
你应该能看到一个功能完整的视频播放器,可以播放你放在 wwwroot/videos 目录下的视频。

现代 Blazor 方式
Blazor 是 .NET 的现代 Web UI 框架,它允许你使用 C# 而不是 JavaScript 来构建交互式客户端 Web UI,实现本地视频播放非常优雅。
核心思想
Blazor 的组件化思想和数据绑定机制使得这个过程非常简洁,你只需要在组件中放置一个 <video> 标签,并通过 @bind 或直接设置 src 属性即可。
步骤详解
项目准备
- 创建一个新的 Blazor Server 或 Blazor WebAssembly 应用。
组件代码 (Razor Component)
在 Pages 文件夹下(或 Shared/Components 文件夹),创建一个名为 VideoPlayer.razor 的组件。
@* VideoPlayer.razor *@
@page "/video-player"
<h3>Blazor 本地视频播放器</h3>
@*
直接在 <source> 标签的 src 属性中使用 C# 字符串。
Blazor 会自动将其渲染到最终的 HTML 中。
*@
<video width="800" controls autoplay muted>
<source src="/videos/my-video.mp4" type="video/mp4">
您的浏览器不支持 HTML5 视频标签。
</video>
<p>视频文件路径: /videos/my-video.mp4</p>
更高级的用法:通过参数传递视频路径

为了让组件更可复用,你可以通过 @parameter 将视频路径作为参数传入。
@* VideoPlayerReusable.razor *@
@* 定义一个参数,用于接收视频源 *@
@parameter string VideoSource { get; set; }
<h3>可复用的视频播放器</h3>
<video width="800" controls autoplay muted>
<source src="@VideoSource" type="video/mp4">
您的浏览器不支持 HTML5 视频标签。
</video>
<p>当前播放视频: @VideoSource</p>
然后在其他页面(如 Index.razor)中使用这个组件:
@* Index.razor *@ @page "/" <h1>欢迎使用 Blazor!</h1> <p>下面是一个可复用的视频播放器组件:</p> @* 调用可复用组件,并传入视频路径 *@ <VideoPlayerReusable VideoSource="/videos/another-video.mp4" />
运行和访问
- 运行 Blazor 应用。
- 导航到
/video-player或首页,即可看到视频播放器。
关键点和最佳实践
-
视频格式:并非所有浏览器都支持所有视频格式。
mp4(H.264 编码) 是目前兼容性最好的选择,你可以提供多个<source>标签来支持不同格式。<video controls> <source src="video.mp4" type="video/mp4"> <source src="video.webm" type="video/webm"> <source src="video.ogv" type="video/ogg"> </video> -
wwwroot文件夹:在 .NET 中,wwwroot是网站的“根”文件夹,所有放在这里的静态文件(如 CSS, JS, 图片, 视频)都可以通过 URL 直接访问。wwwroot/videos/my-video.mp4的 URL/videos/my-video.mp4。 -
路径:
- 在 C# 代码中构建路径时,使用
Path.Combine是一个好习惯。 - 在 HTML 的
src属性中,路径是相对于网站根目录的,所以以 开头是正确的。
- 在 C# 代码中构建路径时,使用
-
控件属性:
controls: 显示播放器控件(播放、暂停、音量、进度条等)。autoplay: 视频加载后自动播放。注意:许多浏览器(特别是移动端)为了节省流量和提升用户体验,会阻止autoplay,除非视频是静音的 (muted)。muted: 视频静音。width/height: 设置播放器尺寸。
-
流式传输 (Streaming):对于非常大的视频文件,直接使用
<video>标签下载整个文件再播放体验很差,在生产环境中,通常会使用 MPEG-DASH 或 HLS 等流媒体技术。.NET 有一些库(如NReco.VideoConverter)可以帮助你将视频转换为这些格式,或者你可以使用专门的流媒体服务器(如 Wowza, Media Services)。
| 特性 | 传统 MVC/WebForms | 现代 Blazor |
|---|---|---|
| 技术核心 | HTML5 <video> + Razor 语法 |
HTML5 <video> + C# 组件化 |
| 实现复杂度 | 简单,直接 | 非常简洁,代码量少 |
| 可复用性 | 需要手动创建部分视图或用户控件 | 天然支持组件化,易于复用 |
| 数据绑定 | 通过 ViewBag, ViewData 或服务器控件事件 |
强大的 @bind 和 C# 属性绑定 |
| 适用场景 | 所有 .NET Web 项目,特别是已有 MVC/WebForms 项目 | 新项目,追求现代开发体验,C# 全栈开发 |
对于新项目,强烈推荐使用 Blazor,它提供了更流畅的开发体验和更强的代码组织能力,对于维护旧项目,传统的 MVC/WebForms 方式依然是可靠且有效的选择。
