Https Middleware

时间:2018-01-12 14:29:02

标签: c# asp.net-mvc azure-web-sites

在负载测试时运行与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()

有没有人知道我在这里做错了什么或如何防止这种异常?

0 个答案:

没有答案