在 Net Core 开发中如何解决 Cannot access a disposed object 这个问题

这篇具有很好参考价值的文章主要介绍了在 Net Core 开发中如何解决 Cannot access a disposed object 这个问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介
    Net Core跨平台项目开发多了,总会遇到各种各样的问题,我就遇到了一个这样的问题,不能访问 Cannot access a disposed object 错误,经过自己多方努力,查阅资料,终于找到了解决办法,引发这个问题的原因大多数是多次读取请求Body流造成的,需要换一种获取请求Body流方法,不能使用StreamRreader方式,使用Body.CopyTo(ms)方法。

            我使用的环境:Visual Studio 2022
    开发语言:C#
    开发框架:Asp.Net Core Mvc
    DotNet版本:Net 6.0

    遇到问题是好事,说明自己还有不足,那就解决它,时间长了,技术和知识也就积累了。其实解决方法不难,话不多,直接上解决方案。

二、解决方案的具体实现
   解决方法很简单,不需要做过多解释,直接找个配置和编码就可以了,我贴完整源码,是便于以后查阅,不喜勿喷。

    总共三步:红色字体写好了操作步骤(说明一下,红色字体是要解决方法,其他不要关注,把整个代码贴出来,是为了以后查阅

using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc.Razor;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using OpticalTrap.Framework.DataAccessors;
using OpticalTrap.Web.Facade.Extensions.Filters;
using OpticalTrap.Web.Facade.Utilities;
using OpticalTrap.Web.ServiceManager;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews(option =>
{
    option.Filters.Add(typeof(GlobalAuthorizationFilterAttribute));
    option.Filters.Add(typeof(GlobalOperationLogFilterAttribute));
}).AddXmlSerializerFormatters();

#region 第一步:配置可以同步请求读取流数据

builder.Services.Configure<KestrelServerOptions>(k => k.AllowSynchronousIO = true)
    .Configure<IISServerOptions>(k => k.AllowSynchronousIO = true);

#endregion

#region 配置日志

builder.Logging.AddLog4Net("ConfigFiles/log4net.config");

#endregion

#region 配置 Session

builder.Services.AddSession();

#endregion

#region 配置数据库

builder.Services.AddTransientSqlSugar(builder.Configuration["ConnectionStrings:DefaultConnectionString"]);

#endregion

#region 配置区域

builder.Services.Configure<RazorViewEngineOptions>(option =>
{
    option.AreaViewLocationFormats.Clear();
    option.AreaViewLocationFormats.Add("/Areas/{2}/Views/{1}/{0}.cshtml");
    option.AreaViewLocationFormats.Add("/Areas/{2}/Views/Shared/{0}.cshtml");
    option.AreaViewLocationFormats.Add("/Views/Shared/{0}.cshtml");
});

#endregion

#region 配置服务实例

builder.Services.AddBusinessServices();
builder.Services.AddUtilityServices();
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
builder.Services.AddSingleton<SessionCacheObjectProvider>();
builder.Services.AddTransient<AuthorizedDataGridGeneratorWrapper>();
builder.Services.AddSingleton<PageNumberGenerator>();

#endregion

#region 认证设置

builder.Services.AddAuthentication(option =>
{
    option.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    option.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    option.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    option.DefaultForbidScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    option.DefaultSignOutScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
{
    options.LoginPath = "/Validation/Index";
    options.LogoutPath = "/Validation/Logout";
    options.AccessDeniedPath = "/Validation/Index";
    options.Cookie.HttpOnly = true;
    options.ClaimsIssuer = "Cookie";
});

#endregion

var app = builder.Build();

//第二步:启用倒带, 在发生异常时, 可以通过过滤器获取post参数
app.Use((context, next) =>
{
    context.Request.EnableBuffering();
    return next(context);
});

if (app.Environment.IsProduction())
{
    app.UseStatusCodePagesWithReExecute("/ErrorHandler/HttpStatusCode", "?statusCode={0}");
    app.UseExceptionHandler("/ErrorHandler/ExceptionHandler");
}
else
{
    app.UseDeveloperExceptionPage();
}

app.UseStaticFiles();

app.UseSession();
app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute("defaultAreaRoute", "{area:exists}/{controller=Home}/{action=Index}/{id?}");

app.MapControllerRoute("defaultRoute", "{controller=Home}/{action=Index}/{id?}");

app.Run();
 
        我写了一个过滤器(实现日志功能),实现的是IActionFilter 过滤器,在过滤器中,获取Post请求Body的Context使用下面方式获取强调(强调,关注红色字体,其他无关,这是我写的日志功能,贴全部代码,便于以后查阅,不喜勿喷)
  1 using Microsoft.AspNetCore.Mvc.Filters;
  2 using OpticalTrap.Framework.Loggings;
  3 using OpticalTrap.Web.ConstProvider;
  4 using OpticalTrap.Web.Contracts;
  5 using OpticalTrap.Web.Facade.Controllers;
  6 using OpticalTrap.Web.Models;
  7 using System.Reflection;
  8 using System.Security.Claims;
  9 using System.Text;
 10 
 11 namespace OpticalTrap.Web.Facade.Extensions.Filters
 12 {
 13     /// <summary>
 14     /// 该类型定义了全局处理操作日志的过滤器,该类型是密封类型。
 15     /// </summary>
 16     public sealed class GlobalOperationLogFilterAttribute : Attribute, IActionFilter, IAsyncActionFilter
 17     {
 18         #region 实例字段
 19 
 20         private readonly IOperationLogService _operationLogService;
 21         private readonly IServiceProvider _serviceProvider;
 22 
 23         #endregion
 24 
 25         #region 构造函数
 26 
 27         /// <summary>
 28         /// 初始化该类型的新实例。
 29         /// </summary>
 30         /// <param name="operationLogService">需要注入的操作日志服务实例。</param>
 31         /// <param name="serviceProvider">需要注入的服务提供器。</param>
 32         public GlobalOperationLogFilterAttribute(IOperationLogService operationLogService, IServiceProvider serviceProvider)
 33         {
 34             _operationLogService = operationLogService;
 35             _serviceProvider = serviceProvider;
 36         }
 37 
 38         #endregion
 39 
 40         #region 操作日志的同步方法
 41 
 42         /// <summary>
 43         /// 在标注方法执行之前执行该方法。
 44         /// </summary>
 45         /// <param name="context">方法执行前的上下文。</param>
 46         public async void OnActionExecuting(ActionExecutingContext context)
 47         {
 48             if (context.Controller.GetType() != typeof(ErrorHandlerController))
 49             {
 50                 if (context.ActionDescriptor.EndpointMetadata.Any(c => c.GetType() == typeof(RequiredLogAttribute)))
 51                 {
 52                     #region 核心处理
 53 
 54                     var controllerType = context.Controller.GetType();
 55                     var controllerName = controllerType.Name;
 56                     var currentMethodName = context.ActionDescriptor.RouteValues["action"]!;
 57 
 58                     string? loginName = string.Empty;
 59                     var claimKeysProvider = _serviceProvider.GetService<ClaimKeysConstProvider>();
 60                     if (claimKeysProvider != null)
 61                     {
 62                         loginName = context.HttpContext.User.FindFirstValue(claimKeysProvider.ClaimStoreUserNameKey);
 63                     }
 64 
 65                     var currentDateTime = DateTime.Now;
 66                     var methodType = context.HttpContext.Request.Method;
 67                     string parameterResult = string.Empty;
 68                     //获取 Get 方法传递的参数,包括查询参数(queryString的值)和Id({controller=home}/{action=index}/{id?})值,路由配置中的Id。
 69                     if (string.Compare(methodType, "get", true) == 0)
 70                     {
 71                         if (!string.IsNullOrEmpty(context.HttpContext.Request.QueryString.Value) && !string.IsNullOrWhiteSpace(context.HttpContext.Request.QueryString.Value))
 72                         {
 73                             parameterResult = context.HttpContext.Request.QueryString.Value;
 74                         }
 75 
 76                         if (context.ActionArguments.ContainsKey("id"))
 77                         {
 78                             string? id = context.ActionDescriptor.RouteValues["id"];
 79                             if (!string.IsNullOrEmpty(id) && !string.IsNullOrWhiteSpace(id))
 80                             {
 81                                 if (string.IsNullOrEmpty(parameterResult) || string.IsNullOrWhiteSpace(parameterResult))
 82                                 {
 83                                     parameterResult = $"id={id}";
 84                                 }
 85                                 else
 86                                 {
 87                                     parameterResult += $"&id={id}";
 88                                 }
 89                             }
 90                         }
 91                     }
 92                     else
 93                     {
 94                         //获取 Post 方法传递的参数,读取 request.body 里的的参数, 必须在在 Program.cs 里也启用倒带功能
 95                         context.HttpContext.Request.EnableBuffering();
 96                         context.HttpContext.Request.Body.Position = 0;
 97                         using (var memoryStream = new MemoryStream())
 98                         {
 99                             context.HttpContext.Request.Body.CopyTo(memoryStream);
100                             var streamBytes = memoryStream.ToArray();
101                             parameterResult = Encoding.UTF8.GetString(streamBytes);
102                         }
103                         //using (var reader = new StreamReader(context.HttpContext.Request.Body, Encoding.UTF8))
104                         //{
105                         //   var bodyRead = reader.ReadToEndAsync();
106                         //   bodyStr = bodyRead.Result;  //把body赋值给bodyStr
107                         //   needKey = JsonConvert.DeserializeAnonymousType
108                         //  (bodyRead.Result, new Dictionary<string, object>())[dependencySource].ToString();
109                         //}
110                         if (controllerType != typeof(ValidationController))
111                         {
112                             parameterResult = ProcessFormParameters(parameterResult);
113                         }
114                         else
115                         {
116                             parameterResult = ProcessLoginUserNameParameters(parameterResult, out loginName);
117                         }
118                     }
119 
120                     parameterResult = !string.IsNullOrEmpty(parameterResult) ? parameterResult : "没有传递任何参数";
121                     loginName = !string.IsNullOrEmpty(loginName) ? loginName : "anonymous";
122                     Guid userid = Guid.Empty;
123                     if (string.IsNullOrEmpty(context.HttpContext.User.FindFirstValue(ClaimTypes.Sid)) || string.IsNullOrWhiteSpace(context.HttpContext.User.FindFirstValue(ClaimTypes.Sid)))
124                     {
125                         userid = Guid.Parse("a05897f9-0c86-4f5a-a581-e5da936d0e4c");
126                     }
127                     else
128                     {
129                         userid = Guid.Parse(context.HttpContext.User.FindFirstValue(ClaimTypes.Sid));
130                     }
131 
132                     OperationLog log = new OperationLog()
133                     {
134                         Id = Guid.NewGuid(),
135                         Name = $"{loginName} 执行 {controllerName}.{currentMethodName} 操作。",
136                         LoginName = loginName,
137                         Parameters = parameterResult,
138                         ActionName = $"{controllerType.FullName}.{currentMethodName}",
139                         ActionType = methodType,
140                         Message = $"【{loginName}】用户在【{currentDateTime.ToString("yyyy-MM-dd HH:mm:ss")}】执行了控制器【{controllerType.FullName}】的【{currentMethodName}】方法,执行方法的类型:{methodType},执行方法所需的参数:【{parameterResult}】,操作顺利完成。",
141                         Remarks = "全局日志记录器记录的日志。",
142                         CreateUserId = userid,
143                         CreateDate = currentDateTime
144                     };
145 
146                     try
147                     {
148                         MethodInfo? methodInfo;
149                         //如果 Controller 类型配置了 RequiredLogAttribute 特性,说明这个 Controller 里面的所有方法都需要记录日志。
150                         //如果 Controler 配置了 RequiredLogAttribute 特性,但是方法配置 NoLogAttribute 特性,则不记录日志,否则记录日志。
151                         if (controllerType.IsDefined(typeof(RequiredLogAttribute), false))
152                         {
153                             methodInfo = controllerType.GetMethod(currentMethodName);
154                             if (methodInfo != null && !methodInfo.IsDefined(typeof(NoLogAttribute), false))
155                             {
156                                 await _operationLogService.InsertAsync(log);
157                             }
158                         }
159                         else
160                         {
161                             //针对方法配置了 RequiredLogAttribute 特性执行记录日志的功能
162                             methodInfo = controllerType.GetMethod(currentMethodName);
163                             if (methodInfo != null && methodInfo.IsDefined(typeof(RequiredLogAttribute), false))
164                             {
165                                 await _operationLogService.InsertAsync(log);
166                             }
167                         }
168                     }
169                     catch (Exception ex)
170                     {
171                         log.Name = $"异常操作日志:{loginName}在{currentDateTime.ToString("yyyy-MM-dd HH:mm:ss")}执行了{currentMethodName}操作。";
172                         log.Message = $"【{loginName}】用户在【{currentDateTime.ToString("yyyy-MM-dd HH:mm:ss")}】执行了控制器【{controllerType.FullName}】的【{currentMethodName}】方法,执行方法的类型:{methodType},执行方法所需的参数:【{parameterResult}】,操作没有完成,系统发生了异常。<br/>异常详情:{ex.Message},<br/>异常堆栈:{ex.StackTrace}。";
173 
174                         await _operationLogService.InsertAsync(log);
175                     }
176 
177                     #endregion
178                 }
179             }
180         }
181 
182         /// <summary>
183         /// 在标注方法执行之后执行该方法。
184         /// </summary>
185         /// <param name="context">方法执行后的上下文。</param>
186         public void OnActionExecuted(ActionExecutedContext context) { }
187 
188         #endregion
189 
190         #region 操作日志的异步方法
191 
192         /// <summary>
193         /// 全局日志记录器异步实现的操作日志的记录。
194         /// </summary>
195         /// <param name="context">方法执行前的上下文。</param>
196         /// <param name="next">方法执行的下一个环节代理。</param>
197         /// <returns></returns>
198         public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
199         {
200             if (context.Controller.GetType() != typeof(ErrorHandlerController))
201             {
202                 if (context.ActionDescriptor.EndpointMetadata.Any(c => c.GetType() == typeof(RequiredLogAttribute)))
203                 {
204                     #region 核心处理
205 
206                     var controllerType = context.Controller.GetType();
207                     var controllerName = controllerType.Name;
208                     var currentMethodName = context.ActionDescriptor.RouteValues["action"]!;
209 
210                     string? loginName = string.Empty;
211                     var claimKeysProvider = _serviceProvider.GetService<ClaimKeysConstProvider>();
212                     if (claimKeysProvider != null)
213                     {
214                         loginName = context.HttpContext.User.FindFirstValue(claimKeysProvider.ClaimStoreUserNameKey);
215                     }
216 
217                     var currentDateTime = DateTime.Now;
218                     var methodType = context.HttpContext.Request.Method;
219                     string parameterResult = string.Empty;
220                     //获取 Get 方法传递的参数,包括查询参数(queryString的值)和Id({controller=home}/{action=index}/{id?})值,路由配置中的Id。
221                     if (string.Compare(methodType, "get", true) == 0)
222                     {
223                         if (!string.IsNullOrEmpty(context.HttpContext.Request.QueryString.Value) && !string.IsNullOrWhiteSpace(context.HttpContext.Request.QueryString.Value))
224                         {
225                             parameterResult = context.HttpContext.Request.QueryString.Value;
226                         }
227 
228                         if (context.ActionArguments.ContainsKey("id"))
229                         {
230                             string? id = context.ActionArguments["id"]!.ToString();
231                             if (!string.IsNullOrEmpty(id) && !string.IsNullOrWhiteSpace(id))
232                             {
233                                 if (string.IsNullOrEmpty(parameterResult) || string.IsNullOrWhiteSpace(parameterResult))
234                                 {
235                                     parameterResult = $"id={id}";
236                                 }
237                                 else
238                                 {
239                                     parameterResult += $"&id={id}";
240                                 }
241                             }
242                         }
243                     }
244                     else
245                     {
246                         //获取 Post 方法传递的参数,读取 request.body 里的的参数, 必须在在 Program.cs 里也启用倒带功能
247                         context.HttpContext.Request.EnableBuffering();
248                         context.HttpContext.Request.Body.Position = 0;
249                         using (var memoryStream = new MemoryStream())
250                         {
251                             context.HttpContext.Request.Body.CopyTo(memoryStream);
252                             var streamBytes = memoryStream.ToArray();
253                             parameterResult = Encoding.UTF8.GetString(streamBytes);
254                         }
255                         //using (var reader = new StreamReader(context.HttpContext.Request.Body, Encoding.UTF8))
256                         //{
257                         //   var bodyRead = reader.ReadToEndAsync();
258                         //   bodyStr = bodyRead.Result;  //把body赋值给bodyStr
259                         //   needKey = JsonConvert.DeserializeAnonymousType
260                         //  (bodyRead.Result, new Dictionary<string, object>())[dependencySource].ToString();
261                         //}
262                         if (controllerType != typeof(ValidationController))
263                         {
264                             parameterResult = ProcessFormParameters(parameterResult);
265                         }
266                         else
267                         {
268                             parameterResult = ProcessLoginUserNameParameters(parameterResult, out loginName);
269                         }
270                     }
271 
272                     parameterResult = !string.IsNullOrEmpty(parameterResult) ? parameterResult : "没有传递任何参数";
273                     loginName = !string.IsNullOrEmpty(loginName) ? loginName : "anonymous";
274                     Guid userid = Guid.Empty;
275                     if (string.IsNullOrEmpty(context.HttpContext.User.FindFirstValue(ClaimTypes.Sid)) || string.IsNullOrWhiteSpace(context.HttpContext.User.FindFirstValue(ClaimTypes.Sid)))
276                     {
277                         userid = Guid.Parse("a05897f9-0c86-4f5a-a581-e5da936d0e4c");
278                     }
279                     else
280                     {
281                         userid = Guid.Parse(context.HttpContext.User.FindFirstValue(ClaimTypes.Sid));
282                     }
283 
284                     OperationLog log = new OperationLog()
285                     {
286                         Id = Guid.NewGuid(),
287                         Name = $"{loginName} 执行 {controllerName}.{currentMethodName} 操作。",
288                         LoginName = loginName,
289                         Parameters = parameterResult,
290                         ActionName = $"{controllerType.FullName}.{currentMethodName}",
291                         ActionType = methodType,
292                         Message = $"【{loginName}】用户在【{currentDateTime.ToString("yyyy-MM-dd HH:mm:ss")}】执行了控制器【{controllerType.FullName}】的【{currentMethodName}】方法,执行方法的类型:{methodType},执行方法所需的参数:【{parameterResult}】,操作顺利完成。",
293                         Remarks = "全局日志记录器记录的日志。",
294                         CreateUserId = userid,
295                         CreateDate = currentDateTime
296                     };
297 
298                     try
299                     {
300                         MethodInfo? methodInfo;
301                         //如果 Controller 类型配置了 RequiredLogAttribute 特性,说明这个 Controller 里面的所有方法都需要记录日志。
302                         //如果 Controler 配置了 RequiredLogAttribute 特性,但是方法配置 NoLogAttribute 特性,则不记录日志,否则记录日志。
303                         if (controllerType.IsDefined(typeof(RequiredLogAttribute), false))
304                         {
305                             methodInfo = controllerType.GetMethod(currentMethodName);
306                             if (methodInfo != null && !methodInfo.IsDefined(typeof(NoLogAttribute), false))
307                             {
308                                 await _operationLogService.InsertAsync(log);
309                             }
310                         }
311                         else
312                         {
313                             //针对方法配置了 RequiredLogAttribute 特性执行记录日志的功能
314                             methodInfo = controllerType.GetMethod(currentMethodName);
315                             if (methodInfo != null && methodInfo.IsDefined(typeof(RequiredLogAttribute), false))
316                             {
317                                 await _operationLogService.InsertAsync(log);
318                             }
319                         }
320                     }
321                     catch (Exception ex)
322                     {
323                         log.Name = $"异常操作日志:{loginName}在{currentDateTime.ToString("yyyy-MM-dd HH:mm:ss")}执行了{currentMethodName}操作。";
324                         log.Message = $"【{loginName}】用户在【{currentDateTime.ToString("yyyy-MM-dd HH:mm:ss")}】执行了控制器【{controllerType.FullName}】的【{currentMethodName}】方法,执行方法的类型:{methodType},执行方法所需的参数:【{parameterResult}】,操作没有完成,系统发生了异常。<br/>异常详情:{ex.Message},<br/>异常堆栈:{ex.StackTrace}。";
325 
326                         await _operationLogService.InsertAsync(log);
327                     }
328 
329                     #endregion
330                 }
331             }
332 
333             await next.Invoke();
334         }
335 
336         /// <summary>
337         /// 处理用户登录页面所传递的参数,如果包含用户的登录密码,替换成星号。
338         /// </summary>
339         /// <param name="parameters">要处理的参数字符串。</param>
340         /// <param name="loginName">返回用户的登录系统的用户名称。</param>
341         /// <returns></returns>
342         private string ProcessLoginUserNameParameters(string parameters, out string loginName)
343         {
344             loginName = string.Empty;
345             if (parameters.IndexOf("&__RequestVerificationToken") != -1)
346             {
347                 parameters = parameters.Substring(0, parameters.LastIndexOf("&__RequestVerificationToken"));
348                 if (parameters.IndexOf("userName=") != -1)
349                 {
350                     loginName = parameters.Substring("userName=".Length, parameters.IndexOf("&password") - "&password".Length);
351                     parameters = $"{parameters.Substring(0, parameters.LastIndexOf("=") + 1)}*********";
352                 }
353             }
354             else
355             {
356                 if (parameters.IndexOf("userName=") != -1)
357                 {
358                     loginName = parameters.Substring("userName=".Length, parameters.IndexOf("&password") - "&password".Length);
359                     parameters = $"{parameters.Substring(0, parameters.LastIndexOf("=") + 1)}*********";
360                 }
361             }
362             return parameters;
363         }
364 
365         /// <summary>
366         /// 返回经过处理的 Form 表单参数。
367         /// </summary>
368         /// <param name="originalFormParameters">未经处理的、原始的 Form 表单参数。</param>
369         /// <returns></returns>
370         private string ProcessFormParameters(string originalFormParameters)
371         {
372             string result = "没有 Form 表单参数。";
373             if (string.IsNullOrEmpty(originalFormParameters) || string.IsNullOrWhiteSpace(originalFormParameters))
374             {
375                 return result;
376             }
377 
378             if (originalFormParameters.IndexOf("=") != -1 && (originalFormParameters.IndexOf("=") != originalFormParameters.LastIndexOf("=")))
379             {
380                 var formParameters = originalFormParameters.Split(new string[] { "-----------------------------", "Content-Disposition: form-data;" }, StringSplitOptions.RemoveEmptyEntries);
381                 var filterParameter = new List<string>();
382 
383                 //获取参数数据,包含=等号的就是form表单的值
384                 foreach (var parameter in formParameters)
385                 {
386                     if (parameter.IndexOf("=") != -1 && parameter.IndexOf("__RequestVerificationToken", StringComparison.CurrentCultureIgnoreCase) == -1)
387                     {
388                         filterParameter.Add(parameter);
389                     }
390                 }
391                 //整理表单数据格式为:name='xxxx' value='yyyyyy'\r\nname='xxxx2' value='yyyyyy2'....
392                 if (filterParameter.Count > 0)
393                 {
394                     for (int i = 0; i < filterParameter.Count; i++)
395                     {
396                         filterParameter[i] = ProcessCore(filterParameter[i]);
397                     }
398                 }
399 
400                 //凭借结果值,并返回。
401                 if (filterParameter.Count > 0)
402                 {
403                     result = string.Join("\r\n", filterParameter);
404                 }
405             }
406 
407             return result;
408         }
409 
410         /// <summary>
411         /// 递归的处理参数的格式,将格式转换为 name='xxxx' value='yyyyyy'。
412         /// </summary>
413         /// <param name="parameter">要处理的参数。</param>
414         /// <returns>返回处理好的参数。</returns>
415         private string ProcessCore(string parameter)
416         {
417             //过滤Form表单中的图片,只获取字段名和值,具体上传文件的数据不保留。
418             if (parameter.IndexOf("Content-Type: image/", StringComparison.CurrentCultureIgnoreCase) != -1)
419             {
420                 parameter = parameter.Substring(0, parameter.IndexOf("Content-Type: image/"));
421             }
422             else if (parameter.IndexOf("\"") != -1)//替换数据中的斜杠和双引号为单引号
423             {
424                 parameter = parameter.Replace("\"", "'");
425             }
426             else if (parameter.IndexOf("\r\n\r\n") != -1)
427             //替换数据中的两个换行符为value=',格式:“name=\"Details\"\r\n\r\n<p>asdfsadfas</p><p>asdfsadf</p><p>fasdfsadfsadf</p>\r\n”== “name=\"Details\" value='<p>asdfsadfas</p><p>asdfsadf</p><p>fasdfsadfsadf</p>'”
428             {
429                 parameter = parameter.Replace("\r\n\r\n", " value='");
430             }
431             else if (parameter.EndsWith("\r\n"))
432             //替换数据尾部的换行符为单引号,格式:“name=\"Details\"\r\n\r\n<p>asdfsadfas</p><p>asdfsadf</p><p>fasdfsadfsadf</p>\r\n”== “name=\"Details\"\r\n\r\n<p>asdfsadfas</p><p>asdfsadf</p><p>fasdfsadfsadf</p>'”
433             {
434                 parameter = parameter.Replace("\r\n", "'");
435             }
436             else if (parameter.IndexOf(";") != -1)
437             {
438                 parameter = parameter.Replace(";", " ");
439             }
440             else if (parameter.IndexOf("''") != -1)
441             {
442                 parameter = parameter.Replace("''", "'");
443             }
444             else
445             {
446                 return parameter;
447             }
448             return ProcessCore(parameter);
449         }
450 
451         #endregion
452     }
453 }

 文章来源地址https://www.toymoban.com/news/detail-465576.html


三、总结

    好了,写完了,今天又解决了一个问题,知识和技能就是在出现问题和解决问题的过程中积累的,不忘初心,继续努力,老天不会亏待努力的人。

到了这里,关于在 Net Core 开发中如何解决 Cannot access a disposed object 这个问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 一个.Net Core开发的开源动态壁纸软件

    推荐一个Github上Start超过10.8K的超火、好用、强大的、内置很多优美的动态壁纸软件。 这是基于.Net Core+WPF开发的、开源的动态壁纸软件,壁纸设置支持任何文件形式,包括:本地视频、网络视频、图片、Html、网络、Unity单机游戏、Godot游戏等;还支持自定义壁纸的属性,自定

    2024年02月05日
    浏览(49)
  • ASP.NET Core 6 (.NET 6) 快速开发简单登陆和登出功能

    ASP.NET Core 6中的简单登录和登出功能,需要使用身份验证和授权中间件实现, 使用Visual Studio 2022或更高版本开发工具,创建一个ASP.NET Core 6 (.NET 6) 项目,项目添加引用 Microsoft.AspNetCore.Authentication.Cookies ,引用方法可以参考: 1)使用Nuget界面管理器 搜索 \\\"Microsoft.AspNetCore.Authe

    2024年02月21日
    浏览(45)
  • STLINK下载程序出现cannot access target. shutting down debug session问题解决的一般步骤

    不要觉得只有USB接口线会出问题,排线也有可能出问题。 通过上网搜索得知,查找代码是不是使用了下载的接口 PB3和PB4 I/O口,如果使用了,初始化了的话,需要改为其他 IO 口 有时会出现Cannot Load Flash Programming Algorithm 有时会出现Could not stop Cortex-M device.Please check the JTAG cabl

    2024年02月15日
    浏览(41)
  • 杨中科 ASP.NET Core前后端分离开发

    前后端分离 1、传统MVC开发模式: 前后端的代码被放到同一个项目中,前端人员负责编写页面的模板,而后端开发人员负责编写控制器和模型的代码并且“套模板”。 缺点: 互相依赖, 耦合性强,责任划分不清 。 2、主流的“前后端分离”: 前端开发人员和后端开发人员分别负

    2024年01月23日
    浏览(52)
  • C#使用.Net Core进行跨平台开发

    使用 .NET Core 进行跨平台开发是一种灵活的方法,可以在多个操作系统上运行 C# 应用程序。以下是在 C# 中使用 .NET Core 进行跨平台开发的一般步骤: 安装 .NET Core SDK : 在开始之前,需要安装适用于操作系统的 .NET Core SDK。可以从官方网站(https://dotnet.microsoft.com/download)下载

    2024年02月11日
    浏览(61)
  • 解决报错 java.lang.IllegalArgumentException: Cannot format given Object as a Date

    报错原因:我们在SimpleDateFormat.format转化时间格式的时候,传入的值无法转换成date而报的错 我的代码大概就是下面这种 发现SimpleDateFormat.format方法并不适用于LocalDate类型,不然就会报此错误; 这个错误的解决方法都是一样,先把时间转换成date类型,再去调用此方法进行格式

    2024年02月04日
    浏览(44)
  • 基于.Net Core开发的医疗信息LIS系统源码

    SaaS模式.Net Core版云LIS系统源码 医疗信息LIS系统是专为医院检验科设计的一套实验室信息管理系统,能将实验仪器与计算机组成网络,使病人样品登录、实验数据存取、报告审核、打印分发,实验数据统计分析等繁杂的操作过程实现了智能化、自动化和规范化管理。有助于提

    2024年02月12日
    浏览(42)
  • Asp-Net-Core开发笔记:API版本管理

    对于Web API应用程序而言,随着时间的推移以及需求的增加或改变,API必然会遇到升级的需求。事实上,Web API应用程序应该从创建时就考虑到API版本的问题。业务的调整、功能的增加、接口的移除与改名、接口参数变动、实体属性的添加、删除和更改等都会改变API的功能,从

    2024年02月08日
    浏览(46)
  • 如何在 .NET Core WebApi 中处理 MultipartFormDataContent

    最近在对某个后端服务做 .NET Core 升级时,里面使用了多处处理 MultipartFormDataContent 相关内容的代码。这些地方从 .NET Framework 迁移到 .NET Core 之后的代码改动较大,由于本身没有测试覆盖,导致在部署 QA 环境后引发了一些问题。这里做一个技术复盘。 我们在做后端接口开发的

    2023年04月19日
    浏览(44)
  • Asp.net core Webapi 如何执行定时任务?

    在计算机系统中,定时执行一些后台任务是很常见的场景,比如定时发送邮件、备份数据等等。 那么,.NET 技术如何通过编程灵活地实现项目里复杂的自定义任务呢? 如果是 Windows 生态,通常来说,可以有这些方式: 编写一个程序,通过 Windows 内置的任务计划来定时执行。

    2024年02月04日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包