ASP.NET HttpRequest
最后修改于 2023 年 10 月 18 日
在本文中,我们将介绍如何在 ASP.NET 中使用 HttpRequest。
ASP.NET 是一个跨平台、高性能、开源的框架,用于构建现代、支持云的 Web 应用程序。它由 Microsoft 开发。
HTTP 请求
HTTP 请求由客户端(如浏览器或 C# 程序)向指定的托管服务器发起。请求的目的是获取一个资源。托管服务器以 HTTP 响应进行响应。HTTP 请求和响应由 HTTP 协议定义。
关于资源的信息在 URL 中给出。
HTTP 请求包含三个部分
- 请求行
- HTTP 头
- 可选的请求体
请求行是请求消息的第一行。
GET /data/book.html HTTP/1.1
请求行包含 HTTP 方法类型、资源路径和 HTTP 版本号。
HTTP 头提供有关消息的元数据信息;例如,用户客户端、托管服务器、接受的语言或缓存控制。
如果我们想向托管服务器发送一些数据,我们可以将其放在请求消息的请求体中。
HttpRequest 代表从客户端接收到的单个 HTTP 请求。该类型包含用于获取请求主机、请求体、请求头、方案、路径或方法的属性。它位于 Microsoft.AspNetCore.Http 命名空间中。
ASP.NET HttpRequest 示例
下面的示例在 Minimal API 中使用 HttpContext。
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 请求。
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 示例
在下一个示例中,我们在控制器中访问请求对象。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
app.Run("https://:3000");
我们设置了控制器支持。
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。