| File: Matching\HttpMethodSingleEntryPolicyJumpTable.cs | Web Access |
| Project: src\aspnetcore\src\Http\Routing\src\Microsoft.AspNetCore.Routing.csproj (Microsoft.AspNetCore.Routing) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.AspNetCore.Http; namespace Microsoft.AspNetCore.Routing.Matching; internal sealed class HttpMethodSingleEntryPolicyJumpTable : PolicyJumpTable { private readonly int _exitDestination; private readonly string _method; private readonly int _destination; private readonly int _corsPreflightExitDestination; private readonly int _corsPreflightDestination; private readonly bool _supportsCorsPreflight; public HttpMethodSingleEntryPolicyJumpTable( int exitDestination, string method, int destination, bool supportsCorsPreflight, int corsPreflightExitDestination, int corsPreflightDestination) { _exitDestination = exitDestination; _method = method; _destination = destination; _supportsCorsPreflight = supportsCorsPreflight; _corsPreflightExitDestination = corsPreflightExitDestination; _corsPreflightDestination = corsPreflightDestination; } public override int GetDestination(HttpContext httpContext) { var httpMethod = httpContext.Request.Method; if (_supportsCorsPreflight && HttpMethodMatcherPolicy.IsCorsPreflightRequest(httpContext, httpMethod, out var accessControlRequestMethod)) { return HttpMethods.Equals(accessControlRequestMethod.ToString(), _method) ? _corsPreflightDestination : _corsPreflightExitDestination; } return HttpMethods.Equals(httpMethod, _method) ? _destination : _exitDestination; } }