ZetCode

ASP.NET 请求

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 Request 对象。Request 对象提供了对 ASP.NET 应用程序中传入的 HTTP 请求数据的访问。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。Request 对象对于处理客户端输入至关重要。

基本定义

ASP.NET 中的 Request 对象代表来自客户端的传入 HTTP 请求。它提供了对标头、查询字符串、表单数据、Cookie 等的访问。

在 ASP.NET Core 中,可以通过 HttpContext.Request 属性访问 Request 对象。它是 Microsoft.AspNetCore.Http 命名空间的一部分。

Request 提供了访问 HTTP 请求不同部分的属性。这些属性包括 Path、Query、Headers、Cookies、Form 和 Body。每个属性在请求处理中都有特定用途。

ASP.NET 请求示例

以下示例演示了在 ASP.NET 8 中使用 Request 对象访问 HTTP 请求不同部分的各种方法。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。

Controllers/RequestDemoController.cs
using Microsoft.AspNetCore.Mvc;
using System.Text;

[ApiController]
[Route("api/[controller]")]
public class RequestDemoController : ControllerBase
{
    [HttpGet("headers")]
    public IActionResult GetHeaders()
    {
        var headers = Request.Headers
            .ToDictionary(h => h.Key, h => h.Value.ToString());
        return Ok(headers);
    }

    [HttpGet("query")]
    public IActionResult GetQueryParams()
    {
        var queryParams = Request.Query
            .ToDictionary(q => q.Key, q => q.Value.ToString());
        return Ok(queryParams);
    }

    [HttpGet("path/{id}")]
    public IActionResult GetPathParams(int id)
    {
        return Ok(new { 
            Id = id,
            Path = Request.Path,
            RouteValues = Request.RouteValues
        });
    }

    [HttpPost("form")]
    public async Task<IActionResult> ProcessForm()
    {
        if (!Request.HasFormContentType)
            return BadRequest("Expected form content");

        var form = await Request.ReadFormAsync();
        var formData = form.ToDictionary(f => f.Key, f => f.Value.ToString());
        return Ok(formData);
    }

    [HttpPost("body")]
    public async Task<IActionResult> ProcessBody()
    {
        using var reader = new StreamReader(
            Request.Body, Encoding.UTF8);
        var body = await reader.ReadToEndAsync();
        return Ok(new { BodyContent = body });
    }
}

此控制器演示了使用 Request 对象的五种不同方法。第一种方法展示了如何通过 Request.Headers 访问 HTTP 标头。

第二种方法使用 Request.Query 访问查询字符串参数。第三种方法显示了请求中的路径参数和路由值。

第四种方法演示了使用 ReadFormAsync 进行表单数据处理。第五种方法展示了如何将原始请求正文读取为字符串。

每种方法都以结构化格式返回提取的数据。该示例展示了 Request 对象在处理不同请求组件方面的多功能性。

来源

Microsoft ASP.NET HTTP 请求文档

在本文中,我们探讨了 ASP.NET 8 中的 Request 对象。这个基本组件提供了对传入 HTTP 请求数据的全面访问。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 ASP.NET 教程