aspnetcore/src/Microsoft.AspNetCore.Server.../BadHttpRequestException.cs

120 lines
6.0 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.IO;
using Microsoft.AspNetCore.Server.Kestrel.Internal.Http;
namespace Microsoft.AspNetCore.Server.Kestrel
{
public sealed class BadHttpRequestException : IOException
{
private BadHttpRequestException(string message)
: base(message)
{
}
internal static BadHttpRequestException GetException(RequestRejectionReason reason)
{
BadHttpRequestException ex;
switch (reason)
{
case RequestRejectionReason.MissingMethod:
ex = new BadHttpRequestException("Missing method.");
break;
case RequestRejectionReason.InvalidMethod:
ex = new BadHttpRequestException("Invalid method.");
break;
case RequestRejectionReason.MissingRequestTarget:
ex = new BadHttpRequestException("Missing request target.");
break;
case RequestRejectionReason.MissingHTTPVersion:
ex = new BadHttpRequestException("Missing HTTP version.");
break;
case RequestRejectionReason.UnrecognizedHTTPVersion:
ex = new BadHttpRequestException("Unrecognized HTTP version.");
break;
case RequestRejectionReason.MissingLFInRequestLine:
ex = new BadHttpRequestException("Missing LF in request line.");
break;
case RequestRejectionReason.HeadersCorruptedInvalidHeaderSequence:
ex = new BadHttpRequestException("Headers corrupted, invalid header sequence.");
break;
case RequestRejectionReason.HeaderLineMustNotStartWithWhitespace:
ex = new BadHttpRequestException("Header line must not start with whitespace.");
break;
case RequestRejectionReason.NoColonCharacterFoundInHeaderLine:
ex = new BadHttpRequestException("No ':' character found in header line.");
break;
case RequestRejectionReason.WhitespaceIsNotAllowedInHeaderName:
ex = new BadHttpRequestException("Whitespace is not allowed in header name.");
break;
case RequestRejectionReason.HeaderLineMustEndInCRLFOnlyCRFound:
ex = new BadHttpRequestException("Header line must end in CRLF; only CR found.");
break;
case RequestRejectionReason.HeaderValueLineFoldingNotSupported:
ex = new BadHttpRequestException("Header value line folding not supported.");
break;
case RequestRejectionReason.MalformedRequestInvalidHeaders:
ex = new BadHttpRequestException("Malformed request: invalid headers.");
break;
case RequestRejectionReason.UnexpectedEndOfRequestContent:
ex = new BadHttpRequestException("Unexpected end of request content.");
break;
case RequestRejectionReason.BadChunkSuffix:
ex = new BadHttpRequestException("Bad chunk suffix.");
break;
case RequestRejectionReason.BadChunkSizeData:
ex = new BadHttpRequestException("Bad chunk size data.");
break;
case RequestRejectionReason.ChunkedRequestIncomplete:
ex = new BadHttpRequestException("Chunked request incomplete.");
break;
case RequestRejectionReason.PathContainsNullCharacters:
ex = new BadHttpRequestException("The path contains null characters.");
break;
case RequestRejectionReason.InvalidCharactersInHeaderName:
ex = new BadHttpRequestException("Invalid characters in header name.");
break;
case RequestRejectionReason.NonAsciiOrNullCharactersInInputString:
ex = new BadHttpRequestException("The input string contains non-ASCII or null characters.");
break;
case RequestRejectionReason.RequestLineTooLong:
ex = new BadHttpRequestException("Request line too long.");
break;
case RequestRejectionReason.MissingSpaceAfterMethod:
ex = new BadHttpRequestException("No space character found after method in request line.");
break;
case RequestRejectionReason.MissingSpaceAfterTarget:
ex = new BadHttpRequestException("No space character found after target in request line.");
break;
case RequestRejectionReason.MissingCrAfterVersion:
ex = new BadHttpRequestException("Missing CR in request line.");
break;
default:
ex = new BadHttpRequestException("Bad request.");
break;
}
return ex;
}
internal static BadHttpRequestException GetException(RequestRejectionReason reason, string value)
{
BadHttpRequestException ex;
switch (reason)
{
case RequestRejectionReason.MalformedRequestLineStatus:
ex = new BadHttpRequestException($"Invalid request line: {value}");
break;
case RequestRejectionReason.InvalidContentLength:
ex = new BadHttpRequestException($"Invalid content length: {value}");
break;
default:
ex = new BadHttpRequestException("Bad request.");
break;
}
return ex;
}
}
}