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

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

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

“傳導體” HttpContext

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

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

圖二 反向代理訪問程序

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

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

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

總之,客戶端跟 Web應用程序交互 是通過 HttpContext 傳導的。

原理

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

就好像顧客到餐廳吃飯

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

HttpContext 相當于這個服務員,她在前、后傳遞信息。

操作 HttpContext 前期準備

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

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

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

  • 打開 VS(2017)
  • 新建項目
  • ASP.NET Core Web 應用程序
  • Web應用程序(模型視圖控制器)
  • 打開 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;
}

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

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

HttpContext 類型的屬性和方法

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

Authentication               

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

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

Connection

獲取有關此請求的基礎連接的信息

Features

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

Items

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

Request

請求

RequestAborted

通知此請求基礎的連接何時中止,因此請求操作應取消

RequestServices

獲取或設置 IServiceProvider 集合,提供訪問的請求的服務容器

Response

響應

Session

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

TraceIdentifier

獲取或設置用于在跟蹤日志中表示此請求的唯一標識符

User

獲取或設置此請求的用戶

WebSockets

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

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

HttpContext 對象實踐與測試

Request

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

Body

獲取或設置 RequestBody 流

ContentLength

獲取或設置 Content-Length 頭

ContentType

獲取或設置Content-Type 頭

Cookies

獲取或設置 Cookies

Form

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

HasFormContentType     

Checks the Content-Type header for form types.

Headers

Gets the request headers.

Host

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

HttpContext

獲取或設置請求上下文

IsHttps

檢測當前是否HTTPS連接

Method

獲取或設置HTTP方法

Path

獲取或設置當前請求的路徑,即URL

PathBase

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

Protocol

Gets or sets the RequestProtocol.

Query

查詢字符串的集合

QueryString

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

Scheme

獲取或設置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. 加上需要測試的屬性即可。

推薦別人關于 Request 的文章http://www.fzitv.net/article/234396.htm

Response

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

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

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

Body

獲取或設置響應體流

ContentLength     

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

ContentType

獲取或設置內(nèi)容類型響應標頭的值

Cookies

獲取一個對象,該對象可用于管理此響應的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>) 

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

OnCompleted(Func<Object,Task>, Object)     

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

OnStarting(Func<Task>)

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

OnStarting(Func<Object,Task>, Object)

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

Redirect(String)

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

Redirect(String, Boolean)

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

RegisterForDispose(IDisposable)

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

Response 拓展方法

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

取消令牌使用給定的編碼將給定文本寫入響應體

WriteAsync(HttpResponse, String, CancellationToken)

將給定文本寫入響應體。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 ,用下面代碼復制替換

@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 是字典類型
        這里設置 鍵 Test
                 值 i ,它的值是 List<string> 類型
    */

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

結(jié)果

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

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

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

相關文章

  • ASP.NET中Cookie的使用方法

    ASP.NET中Cookie的使用方法

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

    .Net行為型設計模式之策略模式(Stragety)

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

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

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

    .Net中Task Parallel Library的基本用法

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

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

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

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

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

    .Net創(chuàng)建型設計模式之簡單工廠模式(Simple?Factory)

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

    c#中常用的js語句

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

    asp.net WebForm頁面間傳值方法

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

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

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

最新評論

民县| 易门县| 广汉市| 延边| 庆安县| 鱼台县| 绥阳县| 云浮市| 星座| 沙坪坝区| 巫溪县| 汉源县| 乌苏市| 屯留县| 沾益县| 逊克县| 焦作市| 濮阳县| 嵊泗县| 兰西县| 昌江| 怀柔区| 从江县| 封丘县| 苍山县| 莆田市| 天台县| 蒲江县| 龙口市| 凤翔县| 东城区| 马鞍山市| 彰武县| 吉水县| 察雅县| 修文县| 马关县| 涿州市| 平乡县| 华蓥市| 正蓝旗|