HttpContext
HttpContext 類封裝了HTTP Request 和 HTTP Response。
當(dāng)收到一條HTTP Request 請求時,就會實例化一個HttpContext對象。HttpContext對象可以被中間件訪問。
注意:HttpContext 不是線程安全的。
讀取 HttpContext 的值
從Razer Page 讀取
public class IndexModel : PageModel
{
public void OnGet()
{
var message = HttpContext.Request.PathBase;
}
}
從Razer Page 的cshtml 讀取
@page
@model IndexModel
@{
var message = HttpContext.Request.PathBase;
}
從 Controller 讀取
public class HomeController : Controller
{
public IActionResult About()
{
var pathBase = HttpContext.Request.PathBase;
return View();
}
}
從 Minimal API 讀取
app.MapGet("/", (HttpContext context) => context.Response.WriteAsync("Hello World"));
修改 HttpContext.Request
HttpContext.Request 可以獲取客戶端發(fā)來的 HttpRequest 請求,并且可以修改其中的值,包括:
- HttpRequest.Path
- HttpRequest.Method
- HttpRequest.Headers
- HttpRequest.RouteValues
- HttpRequest.Query
- HttpRequest.ReadFormAsync()
- HttpRequest.Body
例如下面的代碼:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", (HttpRequest request) =>
{
var userAgent = request.Headers.UserAgent;
var customHeader = request.Headers["x-custom-header"];
return Results.Ok(new { userAgent = userAgent, customHeader = customHeader });
});
app.Run();
修改 HttpContext.Response
除了能修改接收到的 HttpRequest,返回給客戶端的 Response也可以修改。包括:
- HttpResponse.StatusCode
- HttpResponse.ContentType
- HttpResponse.Headers
- HttpResponse.Body
例子代碼如下:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", (HttpResponse response) =>
{
response.Headers.CacheControl = "no-cache";
response.Headers["x-custom-header"] = "Custom value";
return Results.File(File.OpenRead("helloworld.txt"));
});
app.Run();
設(shè)置 Response 尾巴
HTTP/2 和 HTTP/3 支持 Response 尾巴,可以在返回 Response 后設(shè)置Response 尾巴。
例子代碼如下:文章來源:http://www.zghlxwxcb.cn/news/detail-680887.html
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", (HttpResponse response) =>
{
// Write body
response.WriteAsync("Hello world");
if (response.SupportsTrailers())
{
response.AppendTrailer("trailername", "TrailerValue");
}
});
app.Run();
終止 HttpRequest
HttpContext.RequestAborted cancellation token 可以用于通知HttpRequest 已經(jīng)被終止。
在請求時:文章來源地址http://www.zghlxwxcb.cn/news/detail-680887.html
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
var httpClient = new HttpClient();
app.MapPost("/books/{bookId}", async (int bookId, HttpContext context) =>
{
var stream = await httpClient.GetStreamAsync(
$"http://consoto/books/{bookId}.json", context.RequestAborted);
return Results.Stream(stream, "application/json");
});
app.Run();
到了這里,關(guān)于ASP.NET Core 的 HttpContex的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!