ZetCode

ASP.NET HttpRequest

最后修改于 2023 年 10 月 18 日

在本文中,我们将介绍如何在 ASP.NET 中使用 HttpRequest。

ASP.NET 是一个跨平台、高性能、开源的框架,用于构建现代、支持云的 Web 应用程序。它由 Microsoft 开发。

HTTP 请求

HTTP 请求由客户端(如浏览器或 C# 程序)向指定的托管服务器发起。请求的目的是获取一个资源。托管服务器以 HTTP 响应进行响应。HTTP 请求和响应由 HTTP 协议定义。

关于资源的信息在 URL 中给出。

HTTP 请求包含三个部分

请求行是请求消息的第一行。

GET /data/book.html HTTP/1.1

请求行包含 HTTP 方法类型、资源路径和 HTTP 版本号。

HTTP 头提供有关消息的元数据信息;例如,用户客户端、托管服务器、接受的语言或缓存控制。

如果我们想向托管服务器发送一些数据,我们可以将其放在请求消息的请求体中。

HttpRequest 代表从客户端接收到的单个 HTTP 请求。该类型包含用于获取请求主机、请求体、请求头、方案、路径或方法的属性。它位于 Microsoft.AspNetCore.Http 命名空间中。

ASP.NET HttpRequest 示例

下面的示例在 Minimal API 中使用 HttpContext

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

app.MapGet("/{*.}", (HttpRequest request) =>
{
    string host = request.Host.Host;
    string method = request.Method;
    string path = request.Path;

    string ua = request.Headers.UserAgent;

    return Results.Content($"{host} {method} {path} {ua}");
});

app.Run("https://:3000");

在示例中,我们将所有 GET 请求映射到 lambda 表达式。

app.MapGet("/{*.}", (HttpRequest request) =>

我们将 HttpRequest 作为 lambda 表达式的参数。

string host = request.Host.Host;
string method = request.Method;
string path = request.Path;

string ua = request.Headers.UserAgent;

我们通过请求对象的属性获取各种信息。

$ curl localhost:3000/users -H 'Content-Type: plain/text'
localhost GET /users curl/7.81.0

我们使用 curl 工具创建一个 HTTP 请求。


接下来,我们从 C# 程序创建一个 HTTP 请求。

Program.cs
var url = "https://:3000/hello";

using var client = new HttpClient();

var msg = new HttpRequestMessage(HttpMethod.Get, url);
msg.Headers.Add("User-Agent", "C# program");
var res = await client.SendAsync(msg);

var content = await res.Content.ReadAsStringAsync();

Console.WriteLine(content);

要创建 HTTP 请求,我们使用 HttpClient

var msg = new HttpRequestMessage(HttpMethod.Get, url);

从客户端,我们使用 HttpRequestMessage 创建 HTTP 请求。

msg.Headers.Add("User-Agent", "C# program");

我们使用 Headers 属性添加一个头。

$ dotnet run
localhost GET /hello C# program

ASP.NET HttpRequest MVC 示例

在下一个示例中,我们在控制器中访问请求对象。

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

var app = builder.Build();

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

app.Run("https://:3000");

我们设置了控制器支持。

Controllers/HomeController.cs
using Microsoft.AspNetCore.Mvc;

public class HomeController : Controller
{
    [HttpGet("/{*.}")]
    [Produces("text/plain")]
    public IActionResult Index()
    {
        string method = HttpContext.Request.Method;
        string host = HttpContext.Request.Host.ToString();
        string path = HttpContext.Request.Path;
        string ua = HttpContext.Request.Headers["User-Agent"];

        string msg = $"{method} {host} {path} {ua}\n";
        return Ok(msg);
    }
}

在控制器的 Index 操作中,我们通过 HttpContext 获取请求对象。

在本文中,我们研究了 ASP.NET 中的 HttpRequest。

作者

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

列出所有 ASP.NET 教程