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

如何在C# Minimal API中获取POST请求的登录名与密码参数?

解决Minimal API获取登录表单输入的问题

首先要修正登录表单的关键问题:你的HTML表单里的输入框没有name属性,表单提交时不会携带参数名,后端无法识别对应字段。先修改GetLogin.cs里的表单:

string html =
    $""""
    <html>
        <head>
            <title>Login</title>
        </head>
        <body>
            <form action="/login?returnurl={HttpUtility.UrlEncode(returnUrl)}" method="post">
                <!-- 添加name属性,后端将通过该名称识别字段 -->
                <input value="YourLoginName" type="text" name="username"/><br>
                <input value="YourPassword" type="password" name="password"/><br>
                <input value="Submit" type="submit"/>
            </form>
        </body>
    </html>
    """";

另外,Program.cs里重复调用了builder.Services.AddAuthentication(),保留第一个带"cookie"参数的配置即可,删掉多余的builder.Services.AddAuthentication();行。

接下来提供三种在PostLogin.cs里获取用户名和密码的方法:

方法1:模型绑定(推荐)

创建登录请求模型,通过[FromForm]自动绑定表单数据:

// 定义表单绑定模型
namespace Server.EndPoints
{
    public class LoginRequest
    {
        public string Username { get; set; }
        public string Password { get; set; }
    }

    public static class PostLogin
    {
        public static async Task<IResult> Handler([FromForm] LoginRequest loginRequest, string returnUrl)
        {
            // 直接使用模型属性
            var username = loginRequest.Username;
            var password = loginRequest.Password;

            // 此处添加用户验证逻辑...

            return Results.Redirect(returnUrl ?? "/");
        }
    }
}

方法2:直接绑定单个表单参数

无需创建模型,直接在方法参数里通过[FromForm]绑定字段:

namespace Server.EndPoints
{
    public static class PostLogin
    {
        public static async Task<IResult> Handler([FromForm] string username, [FromForm] string password, string returnUrl)
        {
            // 直接使用参数变量
            // 验证逻辑...

            return Results.Redirect(returnUrl ?? "/");
        }
    }
}

方法3:从HttpContext手动读取

如果需要底层操作,可直接从请求表单集合中读取:

namespace Server.EndPoints
{
    public static class PostLogin
    {
        public static async Task<IResult> Handler(HttpContext context, string returnUrl)
        {
            // 安全读取表单字段,避免空引用
            var username = context.Request.Form.TryGetValue("username", out var userVal) ? userVal.ToString() : string.Empty;
            var password = context.Request.Form.TryGetValue("password", out var pwdVal) ? pwdVal.ToString() : string.Empty;

            // 验证逻辑...

            return Results.Redirect(returnUrl ?? "/");
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:20:41