导读:本期聚焦于小伙伴创作的《ASP.NET Core中如何实现路由配置、静态文件托管、身份验证与自定义中间件开发》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《ASP.NET Core中如何实现路由配置、静态文件托管、身份验证与自定义中间件开发》有用,将其分享出去将是对创作者最好的鼓励。

ASP.NET Core的基础功能覆盖了Web应用开发的核心流程,其中路由、静态文件、身份验证和自定义中间件是构建完整应用必不可少的组成部分,下面逐一介绍这些功能的实现方式。

ASP.NET Core中如何实现路由配置、静态文件托管、身份验证与自定义中间件开发

路由配置

路由是ASP.NET Core中将传入请求映射到对应处理程序的核心机制,默认使用终结点路由系统,我们可以在Program.cs中进行配置。

首先是最基础的约定路由配置,示例代码如下:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 配置约定路由,{controller}和{action}是路由参数,{id?}表示可选参数
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

如果需要配置属性路由,可以在控制器的方法上使用Route特性,示例如下:

using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
public class UserController : ControllerBase
{
    [HttpGet("get/{id}")]
    public IActionResult GetUser(int id)
    {
        return Ok($"用户ID:{id}");
    }
}

静态文件托管

静态文件包括图片、CSS、JavaScript等不需要服务器处理的资源,ASP.NET Core默认不会对外提供静态文件,需要手动开启静态文件中间件。

首先需要在项目中创建wwwroot文件夹,将静态文件放到该目录下,然后在Program.cs中添加静态文件中间件:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 启用静态文件中间件,默认从wwwroot目录读取文件
app.UseStaticFiles();

app.Run();

如果需要自定义静态文件目录,可以通过StaticFileOptions配置,示例如下:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 自定义静态文件目录,这里将静态文件放在项目根目录的static文件夹下
var staticDir = Path.Combine(Directory.GetCurrentDirectory(), "static");
if (!Directory.Exists(staticDir))
{
    Directory.CreateDirectory(staticDir);
}
app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = new Microsoft.Extensions.FileProviders.PhysicalFileProvider(staticDir),
    RequestPath = "/static"
});

app.Run();

配置完成后,访问/static/文件名就可以获取到对应静态文件。

身份验证实现

身份验证用于验证请求方的身份,ASP.NET Core提供了灵活的身份验证体系,我们可以基于Cookie或者JWT等方式实现。

以下是基于Cookie的身份验证配置示例,首先在Program.cs中添加身份验证服务:

var builder = WebApplication.CreateBuilder(args);

// 添加Cookie身份验证服务
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Account/Login"; // 未登录时跳转的登录页
        options.AccessDeniedPath = "/Account/Denied"; // 无权限时跳转的页面
        options.ExpireTimeSpan = TimeSpan.FromHours(2); // Cookie过期时间
    });

var app = builder.Build();

// 启用身份验证中间件
app.UseAuthentication();
// 启用授权中间件,用于验证用户是否有权限访问资源
app.UseAuthorization();

app.Run();

在需要验证的控制器或者方法上添加Authorize特性即可限制访问:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

[Authorize] // 整个控制器都需要身份验证
public class OrderController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

public class ProductController : Controller
{
    [Authorize] // 仅该方法需要身份验证
    public IActionResult Detail()
    {
        return View();
    }
}

自定义中间件开发

中间件是ASP.NET Core请求处理管道中的组件,每个中间件都可以处理请求、修改响应或者将请求传递给下一个中间件。我们可以自定义中间件来实现特定的请求处理逻辑。

自定义中间件可以是一个普通的类,需要满足以下条件:包含InvokeAsync方法,构造函数接收RequestDelegate参数。示例如下:

using Microsoft.AspNetCore.Http;

public class RequestLogMiddleware
{
    private readonly RequestDelegate _next;

    public RequestLogMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // 请求处理前的逻辑,这里记录请求路径和时间
        var requestPath = context.Request.Path;
        var requestTime = DateTime.Now;
        Console.WriteLine($"请求路径:{requestPath},请求时间:{requestTime}");

        // 将请求传递给下一个中间件
        await _next(context);

        // 请求处理后的逻辑,这里记录响应状态码
        var responseStatusCode = context.Response.StatusCode;
        Console.WriteLine($"响应状态码:{responseStatusCode}");
    }
}

然后需要编写一个扩展方法来注册中间件:

using Microsoft.AspNetCore.Builder;

public static class RequestLogMiddlewareExtensions
{
    public static IApplicationBuilder UseRequestLog(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<RequestLogMiddleware>();
    }
}

最后在Program.cs中使用该中间件:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 使用自定义请求日志中间件
app.UseRequestLog();

app.Run();

这样每个请求都会经过该中间件,记录请求和响应的相关信息。

ASP.NET_Core路由配置静态文件身份验证自定义中间件修改时间:2026-06-04 14:49:40

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。