在负载测试时运行与webApp的并发连接时,我的Https中间件中出现NullReferenceException。我无法在kestral本地重现这个。该应用程序托管在Azure webapp中。
这是我的中间件代码。第22行抛出异常:await next();
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using System;
using System.Net;
namespace MyWebApp.Mvc.Extensions
{
public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder UseRequireHttps(this IApplicationBuilder builder, bool isDeveloper = false)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
return builder.Use(
async (context, next) =>
{
if (context.Request.IsHttps || isDeveloper)
{
await next();
return;
}
context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
context.Response.ContentType = "text/plain";
await context.Response.WriteAsync("Only secure HTTPS connections permitted.");
});
}
}
}
这是我的日志
的例外情况[错误] Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware: 发生了未处理的异常:对象引用未设置为 对象的实例。 System.NullReferenceException:对象引用 未设置为对象的实例。在 Microsoft.AspNetCore.Http.DefaultHttpContext.get_Items()at Microsoft.AspNetCore.Mvc.Routing.UrlHelperFactory.GetUrlHelper(ActionContext中 上下文) Microsoft.AspNetCore.Mvc.CreatedAtActionResult.OnFormatting(ActionContext中 上下文) Microsoft.AspNetCore.Mvc.Internal.ObjectResultExecutor.ExecuteAsync(ActionContext中 context,ObjectResult result)at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__19.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__24.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResultExecutedContext 上下文) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, 适用范围和放大器;范围,对象& state,Boolean& isCompleted)at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__22.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext 上下文) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, 适用范围和放大器;范围,对象& state,Boolean& isCompleted)at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__17.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__15.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.AspNetCore.Builder.RouterMiddleware.d__4.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.d__7.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6.MoveNext() ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) MyWebApp.Mvc.Extensions.ApplicationBuilderExtensions<> c__DisplayClass0_0< b__0> d.MoveNext() 在 C:\代码\ MyWebApp的\ src \ MyWebApp.Mvc \扩展\ ApplicationBuilderExtensions.cs:行 22 ---从抛出异常的先前位置开始的堆栈跟踪结束--- at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务) Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext()
有没有人知道我在这里做错了什么或如何防止这种异常?