这一节我们将讲解如何在ASP.NET Core 中读取客户端提交的表单数据。大家可能首先想到的是通过模型绑定来处理表单数据。除了模型绑定之外,我们还可以通过 Request 对象直接读取提交的表单数据。
WebApplication.Create();在ASP.NET Core 模板中,使用了如下的代码创建一个WebApplication的对象
var builder = WebApplication.CreateBuilder(args); // 堆代码 duidaima.com // configure services var app = builder.Build(); // configure middleware app.Run();相信上面这段代码大家看起来更熟悉。在项目代码中我们在服务器端输出到客户端一个html的页面,页面中包含了一些字段,我们使用post方式将客户端的数据提交到服务器端,服务端使用Request对象来接受客户端提交的表单数据:
var app = WebApplication.Create(); app.MapGet("", async context => { context.Response.Headers.Append("content-type", "text/html;charset=utf-8"); var page = $@" <!DOCTYPE html> <html lang=""en""> <head> <meta charset=""UTF-8""> <meta name=""viewport"" content=""width=device-width, initial-scale=1.0""> <title>提交个人信息</title> <style> body {{ font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0; }} .container {{ width: 50%; margin: 50px auto; background-color: #fff; padding: 20px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); border-radius: 8px; }} h1 {{ text-align: center; color: #333; }} form {{ display: flex; flex-direction: column; }} input[type=""text""], input[type=""password""], textarea, select {{ width: 100%; padding: 10px; margin-bottom: 20px; border: 1px solid #ccc; border-radius: 4px; }} input[type=""checkbox""] {{ margin-right: 10px; }} label {{ margin-bottom: 10px; color: #555; }} input[type=""submit""] {{ background-color: #28a745; color: #fff; border: none; padding: 10px 20px; cursor: pointer; border-radius: 4px; font-size: 16px; }} input[type=""submit""]:hover {{ background-color: #218838; }} </style> </head> <body> <div class=""container""> <h1>提交表单</h1> <form action=""person-info"" method=""post"" enctype=""multipart/form-data""> <label for=""name"">姓名</label> <input type=""text"" name=""name"" id=""name"" placeholder=""姓名"" required /> <label for=""password"">密码</label> <input type=""password"" name=""password"" id=""password"" placeholder=""密码"" required /> <label for=""description"">描述</label> <textarea name=""description"" id=""description"" placeholder=""描述""></textarea> <label for=""gender"">性别</label> <select name=""gender"" id=""gender""> <option value=""M"">公</option> <option value=""F"">母</option> </select> <label for=""hobbies"">爱好</label> <select name=""hobbies"" id=""hobbies"" multiple=""multiple""> <option>写小说</option> <option>看电影</option> <option>打篮球</option> </select> <div> <input type=""checkbox"" name=""married"" value=""Yes"" id=""married"" /> <label for=""married"">是否已婚?</label> </div> <div> <input type=""checkbox"" name=""adventurous"" value=""Yes"" id=""adventurous"" /> <label for=""adventurous"">是否敢于尝试新事物?</label> </div> <input type=""hidden"" name=""secretHiddenValue"" value=""保密信息"" /> <input type=""submit"" value=""提交个人信息"" /> </form> </div> </body> </html> "; await context.Response.WriteAsync(page); }); app.MapPost("person-info", async context => { context.Response.Headers.Append("content-type", "text/html;charset=utf-8"); if (context.Request.HasFormContentType) { var form = await context.Request.ReadFormAsync(); foreach (var v in form.Keys) { await context.Response.WriteAsync($"{v} = {form[v]} <br/>"); } } await context.Response.WriteAsync(""); }); app.Run();
我们使用Request.ReadFormAsync() 方法读取表单中的数据,并将数据打印出来