最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

“傳導(dǎo)體” HttpContext

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

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

圖二 反向代理訪問(wèn)程序

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

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

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

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

原理

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

就好像顧客到餐廳吃飯

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

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

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

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

當(dāng)有需要時(shí),自然需要用~ 廢話少說(shuō),先簡(jiǎn)單操作 HttpContext 了解下。后面接著解析這個(gè)對(duì)象。

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

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

  • 打開(kāi)HomeController.cs ,在頂部using Microsoft.AspNetCore.Http; 把 HomeController 類(lèi)替換成以下代碼
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);
        }

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

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

以上代碼的作用是把 HttpContext 對(duì)象 傳遞到 視圖 中,直接在視圖中使用。這樣我們?cè)诶斫鈺r(shí),只需在視圖測(cè)試即可。

HttpContext 類(lèi)型的屬性和方法

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

Authentication               

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

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

Connection

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

Features

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

Items

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

Request

請(qǐng)求

RequestAborted

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

RequestServices

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

Response

響應(yīng)

Session

獲取或設(shè)置用于管理此請(qǐng)求的用戶(hù)會(huì)話數(shù)據(jù)的對(duì)象

TraceIdentifier

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

User

獲取或設(shè)置此請(qǐng)求的用戶(hù)

WebSockets

獲取一個(gè)對(duì)象,該對(duì)象管理此請(qǐng)求的WebSu套連接的建立

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

HttpContext 對(duì)象實(shí)踐與測(cè)試

Request

用于獲取用戶(hù)請(qǐng)求的對(duì)象,瀏覽器向Web程序提交表單、訪問(wèn)的URL、URL中包含的查詢(xún)字符串、報(bào)文請(qǐng)求頭等等。

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è)置主機(jī)頭??梢园ǘ丝?/p>

HttpContext

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

IsHttps

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

Method

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

Path

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

PathBase

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

Protocol

Gets or sets the RequestProtocol.

Query

查詢(xún)字符串的集合

QueryString

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

Scheme

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

試一試

打開(kāi) Index.Cshtml ,把以下代碼加上去

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

<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>

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

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

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

推薦別人關(guān)于 Request 的文章http://m.fzitv.net/article/234396.htm

Response

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

使用Response可以直接影響服務(wù)器響應(yīng),設(shè)置響應(yīng)內(nèi)容、響應(yīng)類(lèi)型(發(fā)送網(wǎng)頁(yè)、文件、圖片等)、視圖響應(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)容類(lèi)型響應(yīng)標(biāo)頭的值

Cookies

獲取一個(gè)對(duì)象,該對(duì)象可用于管理此響應(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ā)送到客戶(hù)端之后添加要調(diào)用的委托

OnCompleted(Func<Object,Task>, Object)     

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

OnStarting(Func<Task>)

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

OnStarting(Func<Object,Task>, Object)

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

Redirect(String)

向客戶(hù)端返回一個(gè)臨時(shí)重定向響應(yīng)(HTTP 302)

Redirect(String, Boolean)

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

RegisterForDispose(IDisposable)

處置(不可分)在請(qǐng)求完成處理后,注冊(cè)主機(jī)處理的對(duì)象

Response 拓展方法

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

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

WriteAsync(HttpResponse, String, CancellationToken)

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

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

使用Sendfile 擴(kuò)展發(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.

請(qǐng)參考下圖的第 2 部分

Item

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

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

打開(kāi) 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 是字典類(lèi)型
        這里設(shè)置 鍵 Test
                 值 i ,它的值是 List<string> 類(lèi)型
    */

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

結(jié)果

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

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

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

相關(guān)文章

  • ASP.NET中Cookie的使用方法

    ASP.NET中Cookie的使用方法

    Cookie是一段文本信息,在客戶(hù)端存儲(chǔ) Cookie 是 ASP.NET 的會(huì)話狀態(tài)將請(qǐng)求與會(huì)話關(guān)聯(lián)的方法之一。瀏覽器對(duì) Cookie 的大小有限制,因此,只有不超過(guò) 4096 字節(jié)才能保證被接受。
    2016-04-04
  • .Net行為型設(shè)計(jì)模式之策略模式(Stragety)

    .Net行為型設(shè)計(jì)模式之策略模式(Stragety)

    這篇文章介紹了.Net行為型設(shè)計(jì)模式之策略模式(Stragety),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 使用Docker部署ASP.NET?Core程序

    使用Docker部署ASP.NET?Core程序

    這篇文章介紹了使用Docker部署ASP.NET?Core程序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • .Net中Task Parallel Library的基本用法

    .Net中Task Parallel Library的基本用法

    這篇文章介紹了.Net中Task Parallel Library的基本用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • 一步步打造漂亮的新聞列表(無(wú)刷新分頁(yè)、內(nèi)容預(yù)覽)第三章

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

    前面兩個(gè)章節(jié)我們將需求分析和概要設(shè)計(jì)簡(jiǎn)單介紹了,接下來(lái)是重點(diǎn)的編代碼的階段了(實(shí)現(xiàn)無(wú)刷新分頁(yè))。在編寫(xiě)代碼之前,一定要有計(jì)劃的去編寫(xiě)代碼,不能一開(kāi)始啥也不管就開(kāi)始編代碼,除非你特牛。
    2010-07-07
  • asp.net下SQLite(輕量級(jí)最佳數(shù)據(jù)庫(kù)) 原理分析和開(kāi)發(fā)應(yīng)用

    asp.net下SQLite(輕量級(jí)最佳數(shù)據(jù)庫(kù)) 原理分析和開(kāi)發(fā)應(yīng)用

    SQLite是一個(gè)開(kāi)源的嵌入式關(guān)系數(shù)據(jù)庫(kù),它在2000年由D. Richard Hipp發(fā)布,它的減少應(yīng)用程序管理數(shù)據(jù)的開(kāi)銷(xiāo),SQLite可移植性好,很容易使用,很小,高效而且可靠
    2011-10-10
  • .Net創(chuàng)建型設(shè)計(jì)模式之簡(jiǎn)單工廠模式(Simple?Factory)

    .Net創(chuàng)建型設(shè)計(jì)模式之簡(jiǎn)單工廠模式(Simple?Factory)

    這篇文章介紹了.Net設(shè)計(jì)模式之簡(jiǎn)單工廠模式(Simple?Factory),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • c#中常用的js語(yǔ)句

    c#中常用的js語(yǔ)句

    有時(shí)候在開(kāi)發(fā)中,經(jīng)常輸出一些js與客戶(hù)端實(shí)現(xiàn)交互,雖然說(shuō)是c#的其實(shí)好多js的,需要的朋友可以收藏下。
    2010-04-04
  • asp.net WebForm頁(yè)面間傳值方法

    asp.net WebForm頁(yè)面間傳值方法

    asp.net WebForm頁(yè)面間傳值方法...
    2006-07-07
  • .Net行為型設(shè)計(jì)模式之中介者模式(Mediator)

    .Net行為型設(shè)計(jì)模式之中介者模式(Mediator)

    這篇文章介紹了.Net行為型設(shè)計(jì)模式之中介者模式(Mediator),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05

最新評(píng)論

军事| 临城县| 镇宁| 方正县| 宝应县| 原平市| 汉阴县| 荔浦县| 启东市| 白河县| 临洮县| 定兴县| 潜山县| 新龙县| 岐山县| 和硕县| 大城县| 永安市| 章丘市| 南江县| 类乌齐县| 确山县| 弥勒县| 庄浪县| 晋州市| 和平区| 博野县| 安丘市| 岑巩县| 马山县| 塔河县| 迁西县| 兖州市| 太和县| 历史| 云和县| 繁昌县| 罗田县| 庆云县| 正定县| 和龙市|