欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ASP.NET?Core中HttpContext詳解與使用

 更新時間:2022年02月09日 10:03:09   作者:癡者工良  
這篇文章介紹了ASP.NET?Core中HttpContext詳解與使用,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

“傳導(dǎo)體” HttpContext

要理解 HttpContext 是干嘛的,首先,看圖

圖一 內(nèi)網(wǎng)訪問程序

圖二 反向代理訪問程序

ASP.NET Core 程序中,Kestrel 是一個基于 libuv 的跨平臺ASP.NET Core web服務(wù)器。不清楚 Kerstrel 沒關(guān)系,以后慢慢了解。

我們可以理解成,外部訪問我們的程序,通過 Http 或者 Https 訪問,例如https://localhost:44337/Home/Index,需要通過一個網(wǎng)址,來尋向訪問特定的頁面。

訪問頁面時,會產(chǎn)生 Cookie、Seesion、提交表單、上傳數(shù)據(jù)、身份認證等,外部與應(yīng)用程序之間傳導(dǎo)的導(dǎo)體就是 HttpContext。

總之,客戶端跟 Web應(yīng)用程序交互 是通過 HttpContext 傳導(dǎo)的。

原理

ASP.NET Core 本質(zhì)是一個控制臺程序!ASP.NET Core程序并不直接監(jiān)聽請求,而是通過依賴 HTTP Server,來實現(xiàn)把各自請求轉(zhuǎn)發(fā)到應(yīng)用程序中。這個被轉(zhuǎn)發(fā)的請求相當(dāng)于我們?nèi)粘g覽網(wǎng)頁、上傳文件、提交表單等的網(wǎng)絡(luò)請求,這些請求會被包裝,然后組合到 HttpContext 中。

就好像顧客到餐廳吃飯

  • 需要先點菜、提出服務(wù)要求
  • 服務(wù)員把你的菜單、需求送到廚房
  • 廚師在加工好食品
  • 服務(wù)員再把食品遞給你

HttpContext 相當(dāng)于這個服務(wù)員,她在前、后傳遞信息。

操作 HttpContext 前期準(zhǔn)備

一般來說,我們主要寫好Web程序,而無需理會 數(shù)據(jù)是怎么傳導(dǎo)的。就好像兩臺電腦能夠發(fā)送資料,我們用不著知道他們是通過無線Wifi、光纖還是銅線電纜傳輸?shù)摹?/p>

當(dāng)有需要時,自然需要用~ 廢話少說,先簡單操作 HttpContext 了解下。后面接著解析這個對象。

如果你不需要練習(xí),請直接跳過這一節(jié)內(nèi)容。

  • 打開 VS(2017)
  • 新建項目
  • ASP.NET Core Web 應(yīng)用程序
  • Web應(yīng)用程序(模型視圖控制器)
  • 打開 Startup.cs ,在 ConfigureServices 中,加上

  • 打開HomeController.cs ,在頂部using Microsoft.AspNetCore.Http; 把 HomeController 類替換成以下代碼
public class HomeController : Controller
    {
        private IHttpContextAccessor _accessor;
        public HomeController(IHttpContextAccessor accessor)
        {
            _accessor = accessor;
        }
        [HttpGet]
        public IActionResult Index(int? id)
        {
            var httpcontext = _accessor.HttpContext;

            return View(httpcontext);
        }

    }
  • 打開Views/Home目錄,刪除 Index.cshtml 外的其它視圖
  • 把 Index.cshtml 的代碼改成
@model Microsoft.AspNetCore.Http.HttpContext
@{
    Layout = null;
}

到這里,準(zhǔn)備已經(jīng)完成。

以上代碼的作用是把 HttpContext 對象 傳遞到 視圖 中,直接在視圖中使用。這樣我們在理解時,只需在視圖測試即可。

HttpContext 類型的屬性和方法

在 ASP.NET Core 中,系統(tǒng)為每一個請求分配一個線程,HttpContext 針對的,就是一個線程。所以它的類、方法、屬性等,都是針對當(dāng)前請求起作用。

Authentication               

這個已經(jīng)用不到了,這里只是列一下表。

用于身份認證(ASP.NET中用到),官方不建議在ASP.NT Core中使用。替代方案 Microsoft.AspNetCore.Authentication.AuthenticationHttpContextExtensions

Connection

獲取有關(guān)此請求的基礎(chǔ)連接的信息

Features

獲取此請求上可用的服務(wù)器和中間件提供的HTTP特性的集合

Items

獲取或設(shè)置可用于在該請求范圍內(nèi)共享數(shù)據(jù)的鍵/值集合

Request

請求

RequestAborted

通知此請求基礎(chǔ)的連接何時中止,因此請求操作應(yīng)取消

RequestServices

獲取或設(shè)置 IServiceProvider 集合,提供訪問的請求的服務(wù)容器

Response

響應(yīng)

Session

獲取或設(shè)置用于管理此請求的用戶會話數(shù)據(jù)的對象

TraceIdentifier

獲取或設(shè)置用于在跟蹤日志中表示此請求的唯一標(biāo)識符

User

獲取或設(shè)置此請求的用戶

WebSockets

獲取一個對象,該對象管理此請求的WebSu套連接的建立

Item、Session、Response 等對象都是需要經(jīng)常使用到的,下面筆者會詳細實踐。

HttpContext 對象實踐與測試

Request

用于獲取用戶請求的對象,瀏覽器向Web程序提交表單、訪問的URL、URL中包含的查詢字符串、報文請求頭等等。

Body

獲取或設(shè)置 RequestBody 流

ContentLength

獲取或設(shè)置 Content-Length 頭

ContentType

獲取或設(shè)置Content-Type 頭

Cookies

獲取或設(shè)置 Cookies

Form

獲取或設(shè)置 表單內(nèi)容

HasFormContentType     

Checks the Content-Type header for form types.

Headers

Gets the request headers.

Host

獲取或設(shè)置主機頭??梢园ǘ丝?/p>

HttpContext

獲取或設(shè)置請求上下文

IsHttps

檢測當(dāng)前是否HTTPS連接

Method

獲取或設(shè)置HTTP方法

Path

獲取或設(shè)置當(dāng)前請求的路徑,即URL

PathBase

獲取或設(shè)置 RequestPathBase,就是URL前面那一段,如https://docs.microsoft.com

Protocol

Gets or sets the RequestProtocol.

Query

查詢字符串的集合

QueryString

獲取或設(shè)置用于在Request.Query中創(chuàng)建查詢集合的原始查詢字符串

Scheme

獲取或設(shè)置HTTP請求方案

試一試

打開 Index.Cshtml ,把以下代碼加上去

(為了看得清楚一點,我加了表格)

<table>
    <tr>
        <td>RequestBody流</td>
        <td> @Model.Request.Body</td>
    </tr>
    <tr>
        <td>Content-Length頭</td>
        <td>@Model.Request.ContentLength</td>
    </tr>
    <tr>
        <td>Content-Type頭</td>
        <td> @Model.Request.ContentType</td>
    <tr>
        <td>Cookies </td>
        <td>@Model.Request.Cookies</td>
        </tr>
    <tr>
        <td>IsHttps</td>
        <td>@Model.Request.IsHttps</td>
        </tr>
    <tr>
        <td>Host </td>
        <td>@Model.Request.Host</td>
    </tr>

</table>

運行Web程序,結(jié)果如下

在瀏覽器 F12 后,可以看到控制臺的內(nèi)容。請查看 下圖的 1、3部分

Request 的其它使用方法,就不再贅述,你可以在視圖中@Model.Request. 加上需要測試的屬性即可。

推薦別人關(guān)于 Request 的文章http://www.dbjr.com.cn/article/234396.htm

Response

Request 是 客戶端向 Web 發(fā)送請求,而 Response 則是 Web 響應(yīng) 客戶端 的請求。這里筆者就不全部翻譯了

使用Response可以直接影響服務(wù)器響應(yīng),設(shè)置響應(yīng)內(nèi)容、響應(yīng)類型(發(fā)送網(wǎng)頁、文件、圖片等)、視圖響應(yīng)前重定向。

Response 應(yīng)該在控制器中使用。具體使用方法筆者這里就不贅述。

Body

獲取或設(shè)置響應(yīng)體流

ContentLength     

Gets or sets the value for the Content-Type response header.

ContentType

獲取或設(shè)置內(nèi)容類型響應(yīng)標(biāo)頭的值

Cookies

獲取一個對象,該對象可用于管理此響應(yīng)的Cookie

HasStarted

Gets a value indicating whether response headers have been sent to the client.

Headers

Gets the response headers.

HttpContext

Gets the HttpContext for this response.

StatusCode

Gets or sets the HTTP response code.

Response 的方法

OnCompleted(Func<Task>) 

在響應(yīng)已發(fā)送到客戶端之后添加要調(diào)用的委托

OnCompleted(Func<Object,Task>, Object)     

響應(yīng)已發(fā)送到客戶端之后添加要調(diào)用的委托

OnStarting(Func<Task>)

在響應(yīng)頭將被發(fā)送到客戶端之前添加要調(diào)用的委托

OnStarting(Func<Object,Task>, Object)

在響應(yīng)頭將被發(fā)送到客戶端之前添加要調(diào)用的委托

Redirect(String)

向客戶端返回一個臨時重定向響應(yīng)(HTTP 302)

Redirect(String, Boolean)

向客戶端返回重定向響應(yīng)(HTTP 301或HTTP 302)

RegisterForDispose(IDisposable)

處置(不可分)在請求完成處理后,注冊主機處理的對象

Response 拓展方法

GetTypedHeaders(HttpResponse)
WriteAsync(HttpResponse, String, Encoding, CancellationToken)

取消令牌使用給定的編碼將給定文本寫入響應(yīng)體

WriteAsync(HttpResponse, String, CancellationToken)

將給定文本寫入響應(yīng)體。UTF-8編碼將被使用

Clear(HttpResponse)
SendFileAsync(HttpResponse, IFileInfo, Int64, Nullable<Int64>, CancellationToken)     

使用Sendfile 擴展發(fā)送給定的文件

SendFileAsync(HttpResponse, IFileInfo, CancellationToken)

Sends the given file using the SendFile extension.

SendFileAsync(HttpResponse, String, Int64, Nullable<Int64>, CancellationToken)

Sends the given file using the SendFile extension.

SendFileAsync(HttpResponse, String, CancellationToken)

Sends the given file using the SendFile extension.

請參考下圖的第 2 部分

Item

如果你使用過 ViewData,就不難理解 HttpContext.Item

HttpContext.Item 是一個字典集合類型,具體類型為 IDictionary<TModel,TModel>。它的使用方法像 ViewData。(不要跟我說說你不知道 ViewBag、ViewData 是什么~)

打開 Index.Cshtml ,用下面代碼復(fù)制替換

@model Microsoft.AspNetCore.Http.HttpContext
@{
    Layout = null;
}
@{
    List<string> i = new List<string>();
    i.Add("a");
    i.Add("b");
    i.Add("c");
    i.Add("d");
    i.Add("e");
    i.Add("f");
    i.Add("g");
    i.Add("h");
    i.Add("i");

    Model.Items["Test"] = i;       
    /*
        Model.Items 是字典類型
        這里設(shè)置 鍵 Test
                 值 i ,它的值是 List<string> 類型
    */

foreach(var item in Model.Items["Test"] as List<string>) //字典類型,必須先用 as 轉(zhuǎn)為對應(yīng)類型
{
    <br> @item
    
}
}

結(jié)果

可以用HttpContext.Item 來存儲當(dāng)前請求的意向有用的數(shù)據(jù)。

HttpContext 的其它方法使用這里不再贅述,需要注意的是,HttpContext 是針對一個請求的而產(chǎn)生的。

到此這篇關(guān)于ASP.NET Core中HttpContext詳解與使用的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • WPF框架Prism中導(dǎo)航Navigation用法介紹

    WPF框架Prism中導(dǎo)航Navigation用法介紹

    這篇文章介紹了WPF框架Prism中導(dǎo)航Navigation的用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • ASP.NET Core基礎(chǔ)之中間件

    ASP.NET Core基礎(chǔ)之中間件

    這篇文章介紹了ASP.NET Core基礎(chǔ)之中間件,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • ASP.NET Table 表格控件的使用方法

    ASP.NET Table 表格控件的使用方法

    使用 Table 控件可以在 ASP.NET 網(wǎng)頁上創(chuàng)建服務(wù)器可編程的表格。如果要創(chuàng)建的是靜態(tài)表格(運行時不會在其中添加或更改內(nèi)容的表格),則應(yīng)使用 HTML 表格,而不是 Table 控件。
    2016-04-04
  • .Net結(jié)構(gòu)型設(shè)計模式之外觀模式(Facade)

    .Net結(jié)構(gòu)型設(shè)計模式之外觀模式(Facade)

    這篇文章介紹了.Net結(jié)構(gòu)型設(shè)計模式之外觀模式(Facade),文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • SqlConnection.ConnectionString相關(guān)關(guān)鍵字

    SqlConnection.ConnectionString相關(guān)關(guān)鍵字

    SqlConnection.ConnectionString相關(guān)關(guān)鍵字...
    2007-01-01
  • MVC中Action方法的返回類型介紹

    MVC中Action方法的返回類型介紹

    這篇文章介紹了MVC中的Action方法的返回類型,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 一步步打造漂亮的新聞列表(無刷新分頁、內(nèi)容預(yù)覽)第一步

    一步步打造漂亮的新聞列表(無刷新分頁、內(nèi)容預(yù)覽)第一步

    新聞列表是信息管理系統(tǒng)中最常見的,也是最簡單的,一些簡單的新聞列表就是一個table,然后里面循環(huán)寫入數(shù)據(jù)
    2010-07-07
  • ASP.NET Core讀取配置文件

    ASP.NET Core讀取配置文件

    這篇文章介紹了ASP.NET Core讀取配置文件的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • ASP.NET中HttpContext對象下的屬性介紹

    ASP.NET中HttpContext對象下的屬性介紹

    這篇文章介紹了ASP.NET中HttpContext對象下的屬性,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • asp.net Webconfig中的一些配置

    asp.net Webconfig中的一些配置

    除了手動編輯此文件以外,您還可以使用Web 管理工具來配置應(yīng)用程序的設(shè)置??梢允褂?Visual Studio 中的“網(wǎng)站”->“Asp.Net 配置”選項。
    2010-07-07

最新評論