src/Library/NetPro.Web.Api/Helper/ActionFilterHelper.cs
(开头部分) 6KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Formatters;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
namespace NetPro
{
public class ActionFilterHelper
{
private static 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 static void EnableRewind(HttpRequest request)
{
if (!request.Body.CanSeek)
{
request.EnableBuffering();
//Task.WaitAll(request.Body.DrainAsync(CancellationToken.None)); //DrainAsync 导致内存飙升
}
request.Body.Seek(0L, SeekOrigin.Begin);
}
private static string ReadStream(Stream stream, Encoding encoding)
{
using (StreamReader sr = new StreamReader(stream, encoding, true, 1024, true))//这里注意Body部分不能随StreamReader一起释放
{
var str = sr.ReadToEnd();
stream.Seek(0, SeekOrigin.Begin);//内容读取完成后需要将当前位置初始化,否则后面的InputFormatter会无法读取
return str;
}
}
private static string ReadAsString(HttpRequest request)
{
try
{
if (request.ContentLength > 0)
{
EnableRewind(request);
var encoding = GetRequestEncoding(request);
return ReadStream(request.Body, encoding);
}
return null;
//var initialBody = request.Body;
//var buffer = new byte[Convert.ToInt32(request.ContentLength)];
//long position = request.Body.Position;
后面还有 95 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。