Ejemplo n.º 1
0
        public IActionResult Ajax(HttpStatusCodes statusCode,
                                  object data = null,
                                  string msg  = null)
        {
            var ajaxResult = new AjaxResult()
            {
                Status = statusCode == HttpStatusCodes.Ok,
                Code   = statusCode,
                Msg    = msg,
                Data   = data
            };

            switch (statusCode)
            {
            case HttpStatusCodes.Ok:
                return(Ok(ajaxResult));

            case HttpStatusCodes.Unauthorized:
                return(Unauthorized(ajaxResult));

            case HttpStatusCodes.NotFound:
                return(NotFound(ajaxResult));

            case HttpStatusCodes.BadRequest:
                return(BadRequest(ajaxResult));

            default:
                return(Ok(ajaxResult));
            }
        }
Ejemplo n.º 2
0
 public AjaxResult(bool status,
                   HttpStatusCodes statusCode,
                   string msg)
 {
     Status = status;
     Code   = statusCode;
     Msg    = msg;
 }
Ejemplo n.º 3
0
 public void TestHttpStatusCodes_GetCodeNumber_BrokenCodes()
 {
     Assert.AreEqual(-1, HttpStatusCodes.GetCodeNumber("40"));
     Assert.AreEqual(-1, HttpStatusCodes.GetCodeNumber("Not Found"));
     Assert.AreEqual(-1, HttpStatusCodes.GetCodeNumber("5000 Something"));
     Assert.AreEqual(-1, HttpStatusCodes.GetCodeNumber(""));
     Assert.AreEqual(-1, HttpStatusCodes.GetCodeNumber(null));
 }
Ejemplo n.º 4
0
        private void ProcessRequest(object state)
        {
            var context = (IHttpListenerContext)state;

            _Logger.Log(LogLevel.Informational, context.Request.HttpMethod + " " + context.Request.RemoteEndPoint + ": " + context.Request.Url);
            try
            {
                try
                {
                    string method = context.Request.HttpMethod;
                    IWebDAVMethodHandler methodHandler;
                    if (!_MethodHandlers.TryGetValue(method, out methodHandler))
                    {
                        throw new HttpMethodNotAllowedException(string.Format(CultureInfo.InvariantCulture, "%s ({0})", context.Request.HttpMethod));
                    }

                    context.Response.AppendHeader("DAV", "1,2,1#extend");
                    methodHandler.ProcessRequest(this, context, Store, _Logger);
                }
                catch (HttpException)
                {
                    throw;
                }
                catch (FileNotFoundException ex)
                {
                    throw new HttpNotFoundException(innerException: ex);
                }
                catch (DirectoryNotFoundException ex)
                {
                    throw new HttpNotFoundException(innerException: ex);
                }
                catch (NotImplementedException ex)
                {
                    throw new HttpNotImplementedException(innerException: ex);
                }
                catch (Exception ex)
                {
                    throw new HttpInternalServerException(innerException: ex);
                }
            }
            catch (HttpException ex)
            {
                context.Response.StatusCode        = ex.StatusCode;
                context.Response.StatusDescription = HttpStatusCodes.GetName(ex.StatusCode);
                if (ex.Message != context.Response.StatusDescription)
                {
                    byte[] buffer = Encoding.UTF8.GetBytes(ex.Message);
                    context.Response.ContentEncoding = Encoding.UTF8;
                    context.Response.ContentLength64 = buffer.Length;
                    context.Response.OutputStream.Write(buffer, 0, buffer.Length);
                }
                context.Response.Close();
            }
            finally
            {
                _Logger.Log(LogLevel.Informational, context.Response.StatusCode + " " + context.Response.StatusDescription + ": " + context.Request.HttpMethod + " " + context.Request.RemoteEndPoint + ": " + context.Request.Url);
            }
        }
Ejemplo n.º 5
0
        public async Task ProcessRequest_With503Fallback_Returns503()
        {
            var handler = new FallbackResponseHandler(FallbackResponse.Http503ServiceUnavailable);
            var context = new MockHttpContext();
            await handler.ProcessRequest(context);

            Assert.AreEqual(503, context.Response.StatusCode);
            Assert.AreEqual(HttpStatusCodes.GetStatusDescription(503), context.Response.StatusDescription);
        }
Ejemplo n.º 6
0
        public async Task ProcessRequest_With404Fallback_Returns404()
        {
            var handler = new FallbackResponseHandler(FallbackResponse.Http404NotFound);
            var context = new MockHttpContext();
            await handler.ProcessRequest(context);

            Assert.AreEqual(404, context.Response.StatusCode);
            Assert.AreEqual(HttpStatusCodes.GetStatusDescription(404), context.Response.StatusDescription);
        }
Ejemplo n.º 7
0
        /// <summary>
        ///     Processes an incoming HTTP request.
        /// </summary>
        /// <param name="context">The <see cref="IStumpsHttpContext" /> representing both the incoming request and the response.</param>
        /// <returns>
        ///     A member of the <see cref="ProcessHandlerResult" /> enumeration.
        /// </returns>
        /// <exception cref="ArgumentNullException"><paramref name="context"/> is <c>null</c>.</exception>
        public async Task <ProcessHandlerResult> ProcessRequest(IStumpsHttpContext context)
        {
            context = context ?? throw new ArgumentNullException(nameof(context));

            var remoteUrl = BuildRemoteUrlFromContext(context);

            // Create a new HTTP web request
            var remoteWebRequest = (HttpWebRequest)WebRequest.Create(remoteUrl);

            remoteWebRequest.AllowAutoRedirect = false;

            // Populate the headers for the new HTTP request from the incoming HTTP request
            PopulateRemoteHeadersFromContext(context, remoteWebRequest);

            // Populate the HTTP body for the request
            var webResponseResult = await PopulateRemoteBodyFromContext(context, remoteWebRequest);

            var continueProcess = webResponseResult.Success;

            // Execute the remote web request
            if (continueProcess)
            {
                await ExecuteRemoteWebRequest(remoteWebRequest, webResponseResult);
            }

            if (!continueProcess)
            {
                // Return a response to the client that the service is unavailable at this time.
                context.Response.StatusCode        = HttpStatusCodes.HttpServiceUnavailable;
                context.Response.StatusDescription =
                    HttpStatusCodes.GetStatusDescription(HttpStatusCodes.HttpServiceUnavailable);
            }
            else if (webResponseResult.Response != null)
            {
                // Write the headers and the body of the response from the remote HTTP request
                // to the incoming HTTP context.
                WriteContextHeadersFromResponse(context, webResponseResult.Response);
                await WriteContextBodyFromRemoteResponse(context, webResponseResult.Response);

                context.Response.StatusCode        = (int)webResponseResult.Response.StatusCode;
                context.Response.StatusDescription = webResponseResult.Response.StatusDescription;

                var disposable = webResponseResult.Response as IDisposable;
                disposable.Dispose();
            }

            if (context.Response is StumpsHttpResponse stumpsResponse)
            {
                stumpsResponse.Origin = HttpResponseOrigin.RemoteServer;
            }

            this.ContextProcessed?.Invoke(this, new StumpsContextEventArgs(context));

            return(await Task.FromResult <ProcessHandlerResult>(ProcessHandlerResult.Continue));
        }
Ejemplo n.º 8
0
        private static string GetMessage(int statusCode, string message)
        {
            string format = "%s";

            if (!StringEx.IsNullOrWhiteSpace(message))
            {
                format = message;
            }

            return(format.Replace("%s", HttpStatusCodes.GetName(statusCode)));
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Sends a simple response with a specified HTTP status code but no content.
        /// </summary>
        /// <param name="context">
        /// The <see cref="IHttpListenerContext"/> to send the response through.
        /// </param>
        /// <param name="statusCode">
        /// The HTTP status code for the response.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// <para><paramref name="context"/> is <c>null</c>.</para>
        /// </exception>
        public static void SendSimpleResponse(this IHttpListenerContext context, int statusCode = HttpStatusCodes.Successful.OK)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            context.Response.StatusCode        = statusCode;
            context.Response.StatusDescription = HttpStatusCodes.GetName(statusCode);
            context.Response.Close();
        }
Ejemplo n.º 10
0
 public static WebException Create(int code, string message = null, string url = null)
 {
     if (string.IsNullOrEmpty(message) && HttpStatusCodes.TryGetValue(code, out string httpMessage))
     {
         message = code.ToString() + " " + httpMessage;
     }
     if (!string.IsNullOrEmpty(url))
     {
         message += " (" + url + ")";
     }
     return(new(code, message));
 }
        public async Task <HttpResponse> ExecuteApiCallAsync(HttpRequestPriority priority, HttpRequest request, int timeout = 0, params HttpStatusCode[] ignoreErrorCodes)
        {
            var response = await _client.ExecuteAsStringResponseAsync(priority, request, timeout).ConfigureAwait(false);

            if (response.IsSuccessful || ignoreErrorCodes.Contains(response.StatusCode))
            {
                return(response);
            }

            if (HttpStatusCodes.IsErrorStatus(response.StatusCode))
            {
                throw new HttpException("Error status code received", response);
            }

            return(response);
        }
Ejemplo n.º 12
0
        /// <summary>
        ///     Initializes a new instance of the <see cref="FallbackResponseHandler"/> class.
        /// </summary>
        /// <param name="response">The default response.</param>
        /// <exception cref="ArgumentOutOfRangeException"><paramref name="response"/> is <c>null</c>.</exception>
        public FallbackResponseHandler(FallbackResponse response)
        {
            if (!Enum.IsDefined(typeof(FallbackResponse), response))
            {
                throw new ArgumentOutOfRangeException(nameof(response));
            }

            // Fallback to 503 Service Unavailable when undefined
            response = response == FallbackResponse.Undefined ? FallbackResponse.Http503ServiceUnavailable : response;

            _statusCode            = (int)response;
            _statusCodeDescription = HttpStatusCodes.GetStatusDescription(_statusCode);

            _origin = response == FallbackResponse.Http404NotFound
                          ? HttpResponseOrigin.NotFoundResponse
                          : HttpResponseOrigin.ServiceUnavailable;
        }
        private bool ValidateResponse(HttpResponse response, bool shouldCheckIfForbidden = false, params HttpStatusCode[] ignoreErrorCodes)
        {
            if (response.IsSuccessful || ignoreErrorCodes.Contains(response.StatusCode))
            {
                return(true);
            }

            if (shouldCheckIfForbidden && !IsSessionValid(response))
            {
                return(false);
            }

            if (HttpStatusCodes.IsErrorStatus(response.StatusCode))
            {
                throw new HttpException("Error status code recieved", response);
            }

            return(true);
        }
Ejemplo n.º 14
0
 /// <summary>
 /// Initializes a new instance of the <see cref="HttpException"/> class.
 /// </summary>
 /// <param name="statusCode">
 /// The HTTP status code that this <see cref="HttpException"/> maps to.
 /// </param>
 /// <param name="message">
 /// The exception message stating the reason for the exception being thrown.
 /// </param>
 /// <param name="innerException">
 /// The <see cref="Exception"/> that is the cause for this exception;
 /// or <c>null</c> if no inner exception is specified.
 /// </param>
 public HttpException(int statusCode, string message = null, Exception innerException = null)
     : base(GetMessage(statusCode, message), innerException)
 {
     StatusCode        = statusCode;
     StatusDescription = HttpStatusCodes.GetName(statusCode);
 }
Ejemplo n.º 15
0
 public void TestHttpStatusCodes_GetCodeNumber()
 {
     Assert.AreEqual(404, HttpDotNet.HttpStatusCodes.GetCodeNumber("404 Not Found"));
     Assert.AreEqual(404, HttpStatusCodes.GetCodeNumber("404 Something Else"));
     Assert.AreEqual(404, HttpStatusCodes.GetCodeNumber("404"));
 }
Ejemplo n.º 16
0
        public void GetDescription_ForSampleCodes_ReturnsCorrectDescription(int id, string expected)
        {
            string output = HttpStatusCodes.GetName(id);

            Assert.That(output, Is.EqualTo(expected));
        }
Ejemplo n.º 17
0
        public void returns_expected_status_code_when_initialized(HttpStatusCodes expected)
        {
            var sut = new ResourceResponse(expected, "dummy-body");

            Assert.Equal(expected, sut.StatusCode);
        }
Ejemplo n.º 18
0
 public HttpException(HttpStatusCodes code, string errMsg, Exception inner)
     : base(errMsg, inner)
 {
     _code = code;
 }
Ejemplo n.º 19
0
 public HttpException(HttpStatusCodes code, string errMsg) : base(errMsg) {
     _code = code;
 }
Ejemplo n.º 20
0
        public static string GetStatusCode(HttpStatusCodes code)
        {
            switch (code)
            {
                //-------------------------------------------------------------------------------------------1XX
                #region StatusCodes 1XX

            case (HttpStatusCodes.Continue):
                return("100 Continue");

            case (HttpStatusCodes.SwitchingProtocols):
                return("101 Switching Protocols");

            case (HttpStatusCodes.Processing):
                return("102 Processing");

                #endregion
                //-------------------------------------------------------------------------------------------2XX
                #region StatusCodes 2XX

            case (HttpStatusCodes.OK):
                return("200 OK");

            case (HttpStatusCodes.Created):
                return("201 Created");

            case (HttpStatusCodes.Accepted):
                return("202 Accepted");

            case (HttpStatusCodes.NonAuthoritativeInformation):
                return("203 Non-Authoritative Information");

            case (HttpStatusCodes.NoContent):
                return("204 No Content");

            case (HttpStatusCodes.ResetContent):
                return("205 Reset Content");

            case (HttpStatusCodes.PartialContent):
                return("206 Partial Content");

            case (HttpStatusCodes.MultiStatus):
                return("207 Multi Status");

            case (HttpStatusCodes.AlreadyReported):
                return("208 Already Reported");

            case (HttpStatusCodes.IMUsed):
                return("226 IM Used");

                #endregion
                //-------------------------------------------------------------------------------------------3XX
                #region StatusCodes 3XX

            case (HttpStatusCodes.MultipleChoices):
                return("300 Multiple Choices");

            case (HttpStatusCodes.MovedPermanently):
                return("301 Moved Permanently");

            case (HttpStatusCodes.Found):
                return("302 Found");

            case (HttpStatusCodes.SeeOther):
                return("303 See Other");

            case (HttpStatusCodes.NotModified):
                return("304 Not Modified");

            case (HttpStatusCodes.UseProxy):
                return("305 Use Proxy");

            case (HttpStatusCodes.SwitchProxy):
                return("306 Switch Proxy");

            case (HttpStatusCodes.TemporaryRedirect):
                return("307 Temporary Redirect");

            case (HttpStatusCodes.PermanentRedirect):
                return("308 Permanent Redirect");

                #endregion
                //-------------------------------------------------------------------------------------------4XX
                #region StatusCodes 4XX
            case (HttpStatusCodes.BadRequest):
                return("400 Bad Request");

            case (HttpStatusCodes.Unauthorized):
                return("401 Unauthorized");

            case (HttpStatusCodes.PaymentRequired):
                return("402 Payment Required");

            case (HttpStatusCodes.Forbidden):
                return("403 Forbidden");

            case (HttpStatusCodes.NotFound):
                return("404 Not Found");

            case (HttpStatusCodes.MethodNotAllowed):
                return("405 Method Not Allowed");

            case (HttpStatusCodes.NotAcceptable):
                return("406 Not Acceptable");

            case (HttpStatusCodes.ProxyAuthenticationRequired):
                return("407 Proxy Authentication Required");

            case (HttpStatusCodes.RequestTimeout):
                return("408 Request Timeout");

            case (HttpStatusCodes.Conflict):
                return("409 Conflict");

            case (HttpStatusCodes.Gone):
                return("410 Gone");

            case (HttpStatusCodes.LengthRequired):
                return("411 Length Required");

            case (HttpStatusCodes.PreconditionFailed):
                return("412 Precondition Failed");

            case (HttpStatusCodes.PayloadTooLarge):
                return("413 Payload Too Large");

            case (HttpStatusCodes.URITooLong):
                return("414 URI Too Long");

            case (HttpStatusCodes.UnsupportedMediaType):
                return("415 Unsupported Media Type");

            case (HttpStatusCodes.RangeNotSatisfiable):
                return("416 Range Not Satisfiable");

            case (HttpStatusCodes.ExpectationFailed):
                return("417 Expectation Failed");

            case (HttpStatusCodes.ImATeapot):
                return("418 ImATeapot");

            case (HttpStatusCodes.MisdirectedRequest):
                return("421 Misdirected Request");

            case (HttpStatusCodes.UnprocessableEntity):
                return("422 Unprocessable Entity");

            case (HttpStatusCodes.Locked):
                return("423 Locked");

            case (HttpStatusCodes.FailedDependency):
                return("424 Failed Dependency");

            case (HttpStatusCodes.UpgradeRequired):
                return("426 Upgrade Required");

            case (HttpStatusCodes.PreconditionRequired):
                return("428 Precondition Required");

            case (HttpStatusCodes.TooManyRequests):
                return("429 Too Many Requests");

            case (HttpStatusCodes.RequestHeaderFieldsTooLarge):
                return("431 Request Header Fields Too Large");

            case (HttpStatusCodes.UnavailableForLegalReasons):
                return("451 Unavailable For Legal Reasons");

                #endregion
                //-------------------------------------------------------------------------------------------5XX
                #region StatusCodes 5XX
            case (HttpStatusCodes.InternalServerError):
                return("500 Internal Server Error");

            case (HttpStatusCodes.NotImplemented):
                return("501 Not Implemented");

            case (HttpStatusCodes.BadGateway):
                return("502 Bad Gateway");

            case (HttpStatusCodes.ServiceUnavailable):
                return("503 Service Unavailable");

            case (HttpStatusCodes.GatewayTimeout):
                return("504 Gateway Timeout");

            case (HttpStatusCodes.HTTPVersionNotSupported):
                return("505 HTTP Version Not Supported");

            case (HttpStatusCodes.VariantAlsoNegotiates):
                return("506 Variant Also Negotiates");

            case (HttpStatusCodes.InsufficientStorage):
                return("507 Insufficient Storage");

            case (HttpStatusCodes.LoopDetected):
                return("508 Loop Detected");

            case (HttpStatusCodes.NotExtended):
                return("510 Not Extended");

            case (HttpStatusCodes.NetworkAuthenticationRequired):
                return("511 Network Authentication Required");

                #endregion

            default:
                return("500 Internal Server Error");
            }
        }