Asp.net core項目 獲取請求參數(shù)

   public async Task Invoke(HttpContext context)
        {
            try
            {
                var body = await ReadBodyAsync(context.Request);
                LoggerInfo.Info($"請求接口:{context.Request.Path};請求體:{body}");
                await requestDelegate(context);
            }
            catch (Exception ex)
            {
                await HandleExceptionAsync(context, ex);
            }
        }


private async Task<string> ReadBodyAsync(HttpRequest request)
        {
            if (request.ContentLength > 0)
            {
                await EnableRewindAsync(request).ConfigureAwait(false);
                var encoding = GetRequestEncoding(request);
                return await this.ReadStreamAsync(request.Body, encoding).ConfigureAwait(false);
            }
            return null;
        }

        private Encoding GetRequestEncoding(HttpRequest request)
        {
            var requestContentType = request.ContentType;
            var requestMediaType = requestContentType == null ? default(MediaType) : new MediaType(requestContentType);
            var requestEncoding = requestMediaType.Encoding;
            if (requestEncoding == null)
            {
                requestEncoding = Encoding.UTF8;
            }
            return requestEncoding;
        }

        private async Task EnableRewindAsync(HttpRequest request)
        {
            if (!request.Body.CanSeek)
            {
                request.EnableBuffering();

                await request.Body.DrainAsync(CancellationToken.None);
                request.Body.Seek(0L, SeekOrigin.Begin);
            }
        }

        private async Task<string> ReadStreamAsync(Stream stream, Encoding encoding)
        {
            using (StreamReader sr = new StreamReader(stream, encoding, true, 1024, true))//這里注意Body部分不能隨StreamReader一起釋放
            {
                var str = await sr.ReadToEndAsync();
                stream.Seek(0, SeekOrigin.Begin);//內容讀取完成后需要將當前位置初始化,否則后面的InputFormatter會無法讀取
                return str;
            }
        }

————————————————
版權聲明:本文為CSDN博主「娃都會打醬油了」的原創(chuàng)文章蝗砾,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/starfd/article/details/82734039

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市羹蚣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌乱凿,老刑警劉巖顽素,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咽弦,死亡現(xiàn)場離奇詭異,居然都是意外死亡胁出,警方通過查閱死者的電腦和手機离唬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來划鸽,“玉大人,你說我怎么就攤上這事戚哎÷惴蹋” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵型凳,是天一觀的道長丈冬。 經常有香客問我,道長甘畅,這世上最難降的妖魔是什么埂蕊? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮疏唾,結果婚禮上蓄氧,老公的妹妹穿的比我還像新娘。我一直安慰自己槐脏,他們只是感情好喉童,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著顿天,像睡著了一般堂氯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上牌废,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天咽白,我揣著相機與錄音,去河邊找鬼鸟缕。 笑死晶框,一個胖子當著我的面吹牛,可吹牛的內容都是我干的叁扫。 我是一名探鬼主播三妈,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼莫绣!你這毒婦竟也來了畴蒲?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤对室,失蹤者是張志新(化名)和其女友劉穎模燥,沒想到半個月后咖祭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡蔫骂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年么翰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辽旋。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡浩嫌,死狀恐怖,靈堂內的尸體忽然破棺而出补胚,到底是詐尸還是另有隱情码耐,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布溶其,位于F島的核電站骚腥,受9級特大地震影響,放射性物質發(fā)生泄漏瓶逃。R本人自食惡果不足惜束铭,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厢绝。 院中可真熱鬧契沫,春花似錦、人聲如沸昔汉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挤庇。三九已至钞速,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嫡秕,已是汗流浹背渴语。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昆咽,地道東北人驾凶。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像掷酗,于是被迫代替她去往敵國和親调违。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內容