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

ASP.NET Core自定义中间件:HttpContext参数获取与登录验证问题

问题解决:ASP.NET Core中间件获取查询参数及验证逻辑错误修复

1. 请求URL格式错误

你的示例URL localhost:45423/?login=login1/?password=password1 不符合HTTP查询参数规范,多个查询参数之间需用&分隔而非/?。错误格式会导致password参数无法被正确解析,context.Request.Query["password"]会拿到空值,直接导致验证失败。

正确的请求URL应为:

localhost:45423/?login=log1&password=pass1

2. 验证逻辑判断错误

代码中if条件的逻辑存在问题:

if(login != "log1" && password != "pass1")

该条件的含义是「登录名不等于log1 并且 密码不等于pass1」时才返回403,但实际需求是只要登录名或密码任一不正确就拒绝访问,需将运算符改为||(或):

if(login != "log1" || password != "pass1")

也可以反过来判断,逻辑更直观:当登录名和密码都正确时才放行,否则返回403:

if(!(login == "log1" && password == "pass1"))

修正后的完整代码

public class CheckData
{
    private readonly RequestDelegate _next;

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

    public async Task InvokeAsync(HttpContext context)
    {
        var login = context.Request.Query["login"];
        var password = context.Request.Query["password"];

        // 登录名或密码不正确时返回403
        if(login != "log1" || password != "pass1")
        {
            context.Response.StatusCode = StatusCodes.Status403Forbidden;
            await context.Response.WriteAsync("Sorry, you're not logged");
        }
        else
        {
            await _next(context);
        }
    }
}

额外提示

  • 建议使用StatusCodes.Status403Forbidden代替直接写403,提升代码可读性;
  • 刚接触ASP.NET Core时,先熟悉HTTP查询参数规范和中间件执行流程,能避免不少基础问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:06:24