public ActionResult Setting()
        {
            try
            {
                List <MemberInfo> members = MemberInfoDAO.getAllMemberInfo();
                ViewBag.MemberInfos = members;

                return(View("Setting"));
            }
            catch (System.Net.WebException ex)
            {
                //ViewBag.ErrMsg = "網路斷線或遠端伺服器錯誤,請通知管理者";
                ErrorPageModel errModel = new ErrorPageModel
                {
                    ErrorTitle = "Network Error",
                    ErrorMsg   = "網路斷線或遠端伺服器錯誤,請通知管理者"
                };

                return(View("Error", errModel));
            }
            catch (System.Exception ex)
            {
                return(View("Error"));
            }
        }
Exemplo n.º 2
0
 public IActionResult AddPost()
 {
     try
     {
         ViewBag.History = "/Home";
         var claims     = HttpContext.User.Claims;
         var authorName = claims.Where(c => c.Type == ClaimTypes.Name)
                          .Select(c => c.Value)
                          .SingleOrDefault();
         var authorID = -1;
         Int32.TryParse(claims.Where(c => c.Type == "AuthorID")
                        .Select(c => c.Value)
                        .SingleOrDefault(), out authorID);
         var author    = new Author(authorName, authorID);
         var post      = new Post("", author, "");
         var pmBuilder = new PostModelBuilder(post);
         return(View("AddPost", pmBuilder.build()));
     }
     catch (Exception e)
     {
         var errorMessage = new ErrorPageModel("Eror adding post.", "We couldn't add the post.");
         ViewBag.History = "/Home";
         Console.WriteLine(e.ToString());
         return(RedirectToAction("Index", "NullPost", errorMessage));
     }
 }
Exemplo n.º 3
0
        public IActionResult AddPostResult(PostModel post)
        {
            try
            {
                var claims = HttpContext.User.Claims;
                post.AuthorName = claims.Where(c => c.Type == ClaimTypes.Name)
                                  .Select(c => c.Value)
                                  .SingleOrDefault();
                var authorID = -1;
                Int32.TryParse(claims.Where(c => c.Type == "AuthorID")
                               .Select(c => c.Value)
                               .SingleOrDefault(), out authorID);
                post.AuthorID = authorID;
                var postBuilder = new PostBuilder(post);
                var postToAdd   = postBuilder.build();
                var postResult  = _postDataAccess.AddPost(postToAdd);
                ViewBag.History = "/Home";

                var pmBuilder = new PostModelBuilder(postResult);
                return(View("ViewSinglePost", pmBuilder.build()));
            }
            catch (ArgumentException e)
            {
                var errorMessage = new ErrorPageModel("Cannot add post.", "The post had empty properties.");
                Console.WriteLine(e.ToString());
                return(ShowError(errorMessage));
            }
        }
Exemplo n.º 4
0
        // [OutputCache(CacheProfile = CacheProfileName.Error)]
        public ActionResult Error(int statusCode, string status)
        {
            var error = Context.GetFeature <IErrorHandlerFeature>();

            this.Response.StatusCode = statusCode;
            var model = new ErrorPageModel();

            if (error != null)
            {
                model = new ErrorPageModel
                {
                    ErrorDetails = GetErrorDetails(error.Error, false),
                    Headers      = Request.Headers,
                    Query        = Request.Query,
                };
            }
            ActionResult result;

            if (this.Request.IsAjaxRequest())
            {
                // This allows us to show errors even in partial views.
                result = this.PartialView(statusCode.ToString(), model);
            }
            else
            {
                result = this.View(statusCode.ToString(), model);
            }

            return(result);
        }
Exemplo n.º 5
0
        public async Task <IActionResult> ViewSinglePost(String postid)
        {
            var postResult = _postDataAccess.GetPostById(Guid.Parse(postid));

            if (postResult == null)
            {
                ViewBag.History = "/Home";
                var errorMessage = new ErrorPageModel("Post Does Not Exist", "This post does not exist.");
                return(ShowError(errorMessage));
            }

            ViewBag.History = Request.Headers["Referer"].ToString();
            var pmBuilder = new PostModelBuilder(postResult);


            var claims       = HttpContext.User.Claims;
            var userAuthorId = -1;

            Int32.TryParse(claims.Where(c => c.Type == "AuthorID")
                           .Select(c => c.Value)
                           .SingleOrDefault(), out userAuthorId);
            var postAuthorId  = postResult.Author.ID;
            var hasEditPowers = (await _authorization.AuthorizeAsync(User, "BlogEditor")).Succeeded;

            if (userAuthorId == postAuthorId || hasEditPowers)
            {
                return(View("ViewSinglePost", pmBuilder.build()));
            }
            return(View("ViewOnlySinglePost", pmBuilder.build()));
        }
Exemplo n.º 6
0
        public async Task <IActionResult> EditPostResult(PostModel post)
        {
            var userCanEdit = await HasEditPowers();

            if (IsUserPostAuthor(post.AuthorID) || userCanEdit)
            {
                try
                {
                    ViewBag.History = "/Home/ViewAll";

                    var postBuilder = new PostBuilder(post);
                    var postToAdd   = postBuilder.build();
                    var postResult  = _postDataAccess.EditPost(postToAdd);
                    var pmBuilder   = new PostModelBuilder(postResult);
                    return(View("ViewSinglePost", pmBuilder.build()));
                }
                catch (ArgumentException e)
                {
                    ErrorPageModel errorMessage = new ErrorPageModel("Invalid Post.", "The post contained invalid input.");
                    Console.WriteLine(e.ToString());
                    return(ShowError(errorMessage));
                }
            }
            else
            {
                var errorMessage = new ErrorPageModel("Permission Denied", "You do not have permission to edit this post.");
                return(ShowError(errorMessage));
            }
        }
Exemplo n.º 7
0
        // Assumes the response headers have not been sent.  If they have, still attempt to write to the body.
        private async Task DisplayException(HttpContext context, Exception ex)
        {
            var request = context.Request;

            ErrorPageModel model = new ErrorPageModel()
            {
                Options = _options,
            };

            if (_options.ShowExceptionDetails)
            {
                model.ErrorDetails = GetErrorDetails(ex, _options.ShowSourceCode).Reverse();
            }
            if (_options.ShowQuery)
            {
                model.Query = request.Query;
            }/* TODO:
              * if (_options.ShowCookies)
              * {
              * model.Cookies = request.Cookies;
              * }*/
            if (_options.ShowHeaders)
            {
                model.Headers = request.Headers;
            }/* TODO:
              * if (_options.ShowEnvironment)
              * {
              * model.Environment = context;
              * }*/

            var errorPage = new ErrorPage(model);
            await errorPage.ExecuteAsync(context);
        }
Exemplo n.º 8
0
        public async Task <IActionResult> DeletePostResult(PostModel post)
        {
            var userCanDelete = await HasDeletePowers();

            if (IsUserPostAuthor(post.AuthorID) || userCanDelete)
            {
                try
                {
                    var postBuilder = new PostBuilder(post);
                    var postResult  = _postDataAccess.DeletePost(postBuilder.build());
                    ViewBag.History = "/Home";
                    return(RedirectToAction("ViewAll"));
                }
                catch (ArgumentException e)
                {
                    var errorMessage = new ErrorPageModel("Invalid Post.", "We couldn't find the post.");
                    ViewBag.History = "/Home/ViewAll";
                    Console.WriteLine(e.ToString());
                    return(ShowError(errorMessage));
                }
            }
            else
            {
                var errorMessage = new ErrorPageModel("Permission Denied.", "You do not have permission to do that.");
                return(ShowError(errorMessage));
            }
        }
Exemplo n.º 9
0
 public IActionResult ShowError(ErrorPageModel message)
 {
     if (message == null)
     {
         message = new ErrorPageModel();
     }
     ViewBag.History = "/Home/Index";
     return(View("~/Views/Error/Index.cshtml", message));
 }
Exemplo n.º 10
0
        public void OnGet_RequestPage()
        {
            // Arrange
            ErrorPageModel pageModel = new ErrorPageModel();
            // Act
            var result = pageModel.Page();

            // Assert
            Assert.IsType <PageResult>(result);
        }
Exemplo n.º 11
0
        public IActionResult NotAuthorize()
        {
            var model = new ErrorPageModel()
            {
                StatusCode = 403,
                Message    = ExceptionMessages.UserAccessToThisPage
            };

            return(View("Error", model));
        }
Exemplo n.º 12
0
        // GET: ErrorPage
        public ActionResult Standard404()
        {
            var model = new ErrorPageModel()
            {
                Banner   = MediaHelper.GetMediaUrl(CurrentPage, "bannerImage"),
                Header   = CurrentPage.GetPropertyValue <string>("header"),
                Bodytext = CurrentPage.GetPropertyValue <IHtmlString>("bodytext")
            };


            return(View(model));
        }
Exemplo n.º 13
0
        public ActionResult DoQuery(DateTime STime, DateTime ETime)
        {
            try
            {
                DateTime sdate;
                DateTime edate;

                if (STime == null)
                {
                    sdate = CommonType.MinDateTime;
                }
                else
                {
                    sdate = STime;
                }

                if (ETime == null)
                {
                    edate = CommonType.MaxDateTime;
                }
                else
                {
                    edate = ETime;
                }

                List <WeatherInfo> weatherinfos = WeatherDataDAO.GetWeatherInfo(sdate, edate);
                if (weatherinfos != null && weatherinfos.Count > 0)
                {
                    ViewBag.WeatherInfos = weatherinfos;
                    return(View("Result"));
                }
                else
                {
                    ViewBag.Message = "查無資料!";
                }
                return(RedirectToAction("Index"));
            }
            catch (System.Net.WebException ex)
            {
                //ViewBag.ErrMsg = "網路斷線或遠端伺服器錯誤,請通知管理者";
                ErrorPageModel errModel = new ErrorPageModel
                {
                    ErrorTitle = "Network Error",
                    ErrorMsg   = "網路斷線或遠端伺服器錯誤,請通知管理者"
                };

                return(View("Error", errModel));
            }
            catch (System.Exception ex)
            {
                return(View("Error"));
            }
        }
Exemplo n.º 14
0
        private Task DisplayRuntimeException(HttpContext context, Exception ex)
        {
            var endpoint = context.GetEndpoint();

            EndpointModel?endpointModel = null;

            if (endpoint != null)
            {
                endpointModel             = new EndpointModel();
                endpointModel.DisplayName = endpoint.DisplayName;

                if (endpoint is RouteEndpoint routeEndpoint)
                {
                    endpointModel.RoutePattern = routeEndpoint.RoutePattern.RawText;
                    endpointModel.Order        = routeEndpoint.Order;

                    var httpMethods = endpoint.Metadata.GetMetadata <IHttpMethodMetadata>()?.HttpMethods;
                    if (httpMethods != null)
                    {
                        endpointModel.HttpMethods = string.Join(", ", httpMethods);
                    }
                }
            }

            var request = context.Request;
            var title   = Resources.ErrorPageHtml_Title;

            if (ex is BadHttpRequestException badHttpRequestException)
            {
                var badRequestReasonPhrase = WebUtilities.ReasonPhrases.GetReasonPhrase(badHttpRequestException.StatusCode);

                if (!string.IsNullOrEmpty(badRequestReasonPhrase))
                {
                    title = badRequestReasonPhrase;
                }
            }

            var model = new ErrorPageModel
            {
                Options      = _options,
                ErrorDetails = _exceptionDetailsProvider.GetDetails(ex),
                Query        = request.Query,
                Cookies      = request.Cookies,
                Headers      = request.Headers,
                RouteValues  = request.RouteValues,
                Endpoint     = endpointModel,
                Title        = title,
            };

            var errorPage = new ErrorPage(model);

            return(errorPage.ExecuteAsync(context));
        }
Exemplo n.º 15
0
        public ActionResult DoQuery(QueryViewModel model)
        {
            try
            {
                if (model == null)
                {
                    throw new ArgumentNullException("model");
                }

                //GPSLocation gpsLocationInfo = GPSLocationService.GetClientGPSLocationInfo();

                QueryWeatherRequest request = new QueryWeatherRequest();
                //request.GPSLocationInfo = gpsLocationInfo;
                request.AreaCode      = model.AreaCode;
                request.WCCode        = model.WCCode;
                request.QueryDateTime = DateTime.Now;
                QueryWeatherResponse response = QueryServices.GetWeatherInfo(request);
                response.CurrentDay.QueryDate   = request.QueryDateTime.ToString("yyyy/MM/dd");
                response.CurrentDay.AreaCode    = model.AreaCode;
                response.CurrentDay.AreaName    = CityAndAreaConfig.Instance.getAreaNameByAreaCode(model.AreaCode);
                response.CurrentDay.WCCode      = model.WCCode;
                response.CurrentDay.CountryName = CityAndAreaConfig.Instance.getWCCountryNameByWCCode(model.WCCode);
                ViewBag.CurrentDay = response.CurrentDay;
                if (response == null || response.CurrentDay == null)
                {
                    ViewData["NoData"] = "true";
                    return(View("Index"));
                }
                else
                {
                    ViewData["NoData"] = "false";
                    return(View("Result"));
                }
            }
            catch (System.Net.WebException ex)
            {
                //ViewBag.ErrMsg = "網路斷線或遠端伺服器錯誤,請通知管理者";
                ErrorPageModel errModel = new ErrorPageModel {
                    ErrorTitle = "Network Error",
                    ErrorMsg   = "網路斷線或遠端伺服器錯誤,請通知管理者"
                };

                return(View("Error", errModel));
            }
            catch (System.Exception ex)
            {
                return(View("Error"));
            }


            //return RedirectToAction("Result");
        }
Exemplo n.º 16
0
        private RequestDelegate BuildErrorPageApplication(Exception exception)
        {
            if (exception is TargetInvocationException tae)
            {
                exception = tae.InnerException;
            }

            var showDetailedErrors = HostingEnvironment.IsDevelopment() || Options.WebHostOptions.DetailedErrors;

            var model = new ErrorPageModel
            {
                RuntimeDisplayName = RuntimeInformation.FrameworkDescription
            };
            var systemRuntimeAssembly = typeof(System.ComponentModel.DefaultValueAttribute).Assembly;
            var assemblyVersion       = new AssemblyName(systemRuntimeAssembly.FullName).Version.ToString();
            var clrVersion            = assemblyVersion;

            model.RuntimeArchitecture = RuntimeInformation.ProcessArchitecture.ToString();
            var currentAssembly = typeof(ErrorPage).Assembly;

            model.CurrentAssemblyVesion = currentAssembly
                                          .GetCustomAttribute <AssemblyInformationalVersionAttribute>()
                                          .InformationalVersion;
            model.ClrVersion = clrVersion;
            model.OperatingSystemDescription = RuntimeInformation.OSDescription;
            model.ShowRuntimeDetails         = showDetailedErrors;

            if (showDetailedErrors)
            {
                var exceptionDetailProvider = new ExceptionDetailsProvider(
                    HostingEnvironment.ContentRootFileProvider,
                    Logger,
                    sourceCodeLineCount: 6);

                model.ErrorDetails = exceptionDetailProvider.GetDetails(exception);
            }
            else
            {
                model.ErrorDetails = Array.Empty <ExceptionDetails>();
            }

            var errorPage = new ErrorPage(model);

            return(context =>
            {
                context.Response.StatusCode = 500;
                context.Response.Headers[HeaderNames.CacheControl] = "no-cache,no-store";
                context.Response.Headers[HeaderNames.Pragma] = "no-cache";
                context.Response.ContentType = "text/html; charset=utf-8";
                return errorPage.ExecuteAsync(context);
            });
        }
Exemplo n.º 17
0
        public IActionResult EditPost(String postid)
        {
            var postResult = _postDataAccess.GetPostById(Guid.Parse(postid));

            if (postResult == null)
            {
                var errorMessage = new ErrorPageModel("Invalid Post.", "We couldn't find the post. :(");
                ViewBag.History = "/Home/ViewAll";
                return(ShowError(errorMessage));
            }
            ViewBag.History = "/Home/ViewSinglePost?postid=" + postid;
            var postModelBuilder = new PostModelBuilder(postResult);
            var postToEdit       = postModelBuilder.build();

            return(View("EditPost", postToEdit));
        }
Exemplo n.º 18
0
        public IActionResult ViewAll()
        {
            ViewBag.History = "/Home";
            List <PostModel> postResult = _postDataAccess.GetAllPosts().ConvertAll <PostModel>((p) =>
            {
                var pmBuilder = new PostModelBuilder(p);
                return(pmBuilder.build());
            });

            if (postResult == null)
            {
                var errorMessage = new ErrorPageModel("No Posts", "There are no posts.");
                return(ShowError(errorMessage));
            }
            return(View(postResult));
        }
Exemplo n.º 19
0
        RequestDelegate BuildErrorPageApplication(Exception exception)
        {
            if (exception is TargetInvocationException tae)
            {
                exception = tae.InnerException;
            }

            var showDetailedErrors = HostingEnvironment.IsDevelopment() || Options.GameHostOptions.DetailedErrors;

            var model = new ErrorPageModel
            {
                RuntimeDisplayName = RuntimeInformation.FrameworkDescription
            };
            var systemRuntimeAssembly = typeof(System.ComponentModel.DefaultValueAttribute).GetTypeInfo().Assembly;
            var assemblyVersion       = new AssemblyName(systemRuntimeAssembly.FullName).Version.ToString();
            var clrVersion            = assemblyVersion;

            model.RuntimeArchitecture = RuntimeInformation.ProcessArchitecture.ToString();
            var currentAssembly = typeof(ErrorPage).GetTypeInfo().Assembly;

            model.CurrentAssemblyVesion = currentAssembly
                                          .GetCustomAttribute <AssemblyInformationalVersionAttribute>()
                                          .InformationalVersion;
            model.ClrVersion = clrVersion;
            model.OperatingSystemDescription = RuntimeInformation.OSDescription;

            //if (showDetailedErrors)
            //{
            //    var exceptionDetailProvider = new ExceptionDetailsProvider(
            //        HostingEnvironment.ContentRootFileProvider,
            //        sourceCodeLineCount: 6);

            //    model.ErrorDetails = exceptionDetailProvider.GetDetails(exception);
            //}
            //else
            //    model.ErrorDetails = new ExceptionDetails[0];

            var errorPage = new ErrorPage(model);

            return(context =>
            {
                context.Response.StatusCode = 500;
                context.Response.Headers["Cache-Control"] = "no-cache";
                return errorPage.ExecuteAsync(context);
            });
        }
        private Task DisplayRuntimeException(HttpContext context, Exception ex)
        {
            var request = context.Request;

            var model = new ErrorPageModel
            {
                Options      = _options,
                ErrorDetails = _exceptionDetailsProvider.GetDetails(ex),
                Query        = request.Query,
                Cookies      = request.Cookies,
                Headers      = request.Headers
            };

            var errorPage = new ErrorPage(model);

            return(errorPage.ExecuteAsync(context));
        }
        // Assumes the response headers have not been sent.  If they have, still attempt to write to the body.
        private void DisplayException(IOwinContext context, Exception ex)
        {
            var request = context.Request;

            var model = new ErrorPageModel
            {
                Options = this._options,
            };

            if (this._options.ShowExceptionDetails)
            {
                model.ErrorDetails = this.GetErrorDetails(ex, this._options.ShowSourceCode).Reverse();

                //model.ErrorDetails = new ErrorDetails[] { };
            }

            if (this._options.ShowQuery)
            {
                model.Query = request.Query;
            }

            if (this._options.ShowCookies)
            {
                model.Cookies = request.Cookies;
            }

            if (this._options.ShowHeaders)
            {
                model.Headers = request.Headers;
            }

            if (this._options.ShowEnvironment)
            {
                model.Environment = request.Environment;
            }

            var errorPage = new ErrorPage {
                Model = model
            };

            errorPage.Execute(context);
        }
Exemplo n.º 22
0
        public IActionResult Error()
        {
            var exceptionHandlerPathFeature =
                HttpContext.Features.Get <IExceptionHandlerPathFeature>();
            var model = new ErrorPageModel()
            {
                StatusCode = 500,
            };

            if (exceptionHandlerPathFeature?.Error is BaseException e)
            {
                model.Message = e.Message;
            }
            else
            {
                model.Message = ExceptionMessages.FatalError;
            }

            return(View(model));
        }
Exemplo n.º 23
0
        private Task DisplayRuntimeException(HttpContext context, Exception ex)
        {
            var endpoint = context.Features.Get <IEndpointFeature>()?.Endpoint;

            EndpointModel endpointModel = null;

            if (endpoint != null)
            {
                endpointModel             = new EndpointModel();
                endpointModel.DisplayName = endpoint.DisplayName;

                if (endpoint is RouteEndpoint routeEndpoint)
                {
                    endpointModel.RoutePattern = routeEndpoint.RoutePattern.RawText;
                    endpointModel.Order        = routeEndpoint.Order;

                    var httpMethods = endpoint.Metadata.GetMetadata <IHttpMethodMetadata>()?.HttpMethods;
                    if (httpMethods != null)
                    {
                        endpointModel.HttpMethods = string.Join(", ", httpMethods);
                    }
                }
            }

            var request = context.Request;

            var model = new ErrorPageModel
            {
                Options      = _options,
                ErrorDetails = _exceptionDetailsProvider.GetDetails(ex),
                Query        = request.Query,
                Cookies      = request.Cookies,
                Headers      = request.Headers,
                RouteValues  = request.RouteValues,
                Endpoint     = endpointModel
            };

            var errorPage = new ErrorPage(model);

            return(errorPage.ExecuteAsync(context));
        }
Exemplo n.º 24
0
    public static ErrorPageModel CreateErrorPageModel(
        IFileProvider contentRootFileProvider,
        ILogger?logger,
        bool showDetailedErrors,
        Exception exception)
    {
        var systemRuntimeAssembly = typeof(System.ComponentModel.DefaultValueAttribute).Assembly;
        var assemblyVersion       = new AssemblyName(systemRuntimeAssembly.FullName !).Version?.ToString() ?? string.Empty;
        var clrVersion            = assemblyVersion;
        var currentAssembly       = typeof(ErrorPage).Assembly;
        var currentAssemblyVesion = currentAssembly
                                    .GetCustomAttribute <AssemblyInformationalVersionAttribute>() !
                                    .InformationalVersion;

        IEnumerable <ExceptionDetails> errorDetails;

        if (showDetailedErrors)
        {
            var exceptionDetailProvider = new ExceptionDetailsProvider(
                contentRootFileProvider,
                logger,
                sourceCodeLineCount: 6);

            errorDetails = exceptionDetailProvider.GetDetails(exception);
        }
        else
        {
            errorDetails = Array.Empty <ExceptionDetails>();
        }

        var model = new ErrorPageModel(
            errorDetails,
            showDetailedErrors,
            RuntimeInformation.FrameworkDescription,
            RuntimeInformation.ProcessArchitecture.ToString(),
            clrVersion,
            currentAssemblyVesion,
            RuntimeInformation.OSDescription);

        return(model);
    }
Exemplo n.º 25
0
        public IActionResult HandleError(int statusCode)
        {
            var model = new ErrorPageModel()
            {
                StatusCode = statusCode
            };

            switch (statusCode)
            {
            case 404: {
                model.Message = ExceptionMessages.PageNotFound;
                break;
            }

            default: {
                model.Message = ExceptionMessages.FatalError;
                break;
            }
            }
            return(View("Error", model));
        }
Exemplo n.º 26
0
        // Assumes the response headers have not been sent.  If they have, still attempt to write to the body.
        private Task DisplayException(IOwinContext context, Exception ex)
        {
            var request = context.Request;

            ErrorPageModel model = new ErrorPageModel()
            {
                Options = _options,
            };

            if (_options.ShowExceptionDetails)
            {
                model.ErrorDetails = GetErrorDetails(ex, _options.ShowSourceCode).Reverse();
            }
            if (_options.ShowQuery)
            {
                model.Query = request.Query;
            }
            if (_options.ShowCookies)
            {
                model.Cookies = request.Cookies;
            }
            if (_options.ShowHeaders)
            {
                model.Headers = request.Headers;
            }
            if (_options.ShowEnvironment)
            {
                model.Environment = request.Environment;
            }

            var errorPage = new ErrorPage()
            {
                Model = model
            };

            errorPage.Execute(context);
            return(TaskHelpers.Completed());
        }
Exemplo n.º 27
0
        RequestDelegate BuildApplication()
        {
            try
            {
                _applicationServicesException?.Throw();
                EnsureClient();
                EnsureServer();

                var builderFactory = Services.GetRequiredService <IApplicationBuilderFactory>();
                var builder        = builderFactory.CreateBuilder(Server?.Features);
                builder.ApplicationServices = Services;

                var startupFilters = Services.GetService <IEnumerable <IStartupFilter> >();
                Action <IApplicationBuilder> configure = _startup.Configure;
                foreach (var filter in startupFilters.Reverse())
                {
                    configure = filter.Configure(configure);
                }

                configure(builder);

                return(builder.Build());
            }
            catch (Exception ex)
            {
                if (!Options.SuppressStatusMessages)
                {
                    // Write errors to standard out so they can be retrieved when not in development mode.
                    Console.WriteLine("Application startup exception: " + ex.ToString());
                }
                var logger = Services.GetRequiredService <ILogger <GameHost> >();
                logger.ApplicationError(ex);

                if (!Options.CaptureStartupErrors)
                {
                    throw;
                }

                EnsureClient();
                EnsureServer();

                // Generate an HTML error page.
                var hostingEnv         = Services.GetRequiredService <IHostEnvironment>();
                var showDetailedErrors = hostingEnv.IsDevelopment() || Options.DetailedErrors;

                var model = new ErrorPageModel
                {
                    RuntimeDisplayName = RuntimeInformation.FrameworkDescription
                };
                var systemRuntimeAssembly = typeof(System.ComponentModel.DefaultValueAttribute).GetTypeInfo().Assembly;
                var assemblyVersion       = new AssemblyName(systemRuntimeAssembly.FullName).Version.ToString();
                var clrVersion            = assemblyVersion;
                model.RuntimeArchitecture = RuntimeInformation.ProcessArchitecture.ToString();
                var currentAssembly = typeof(ErrorPage).GetTypeInfo().Assembly;
                model.CurrentAssemblyVesion = currentAssembly
                                              .GetCustomAttribute <AssemblyInformationalVersionAttribute>()
                                              .InformationalVersion;
                model.ClrVersion = clrVersion;
                model.OperatingSystemDescription = RuntimeInformation.OSDescription;

                //if (showDetailedErrors)
                //{
                //    var exceptionDetailProvider = new ExceptionDetailsProvider(
                //        hostingEnv.ContentRootFileProvider,
                //        sourceCodeLineCount: 6);

                //    model.ErrorDetails = exceptionDetailProvider.GetDetails(ex);
                //}
                //else
                //    model.ErrorDetails = new ExceptionDetails[0];

                var errorPage = new ErrorPage(model);
                return(context =>
                {
                    context.Response.StatusCode = 500;
                    context.Response.Headers["Cache-Control"] = "no-cache";
                    return errorPage.ExecuteAsync(context);
                });
            }
        }
Exemplo n.º 28
0
    /// <summary>
    /// Startup hooks are pieces of code that will run before a users program main executes
    /// See: https://github.com/dotnet/core-setup/blob/master/Documentation/design-docs/host-startup-hook.md
    /// </summary>
    public static void Initialize()
    {
        if (!NativeMethods.IsAspNetCoreModuleLoaded())
        {
            // This means someone set the startup hook for Microsoft.AspNetCore.Server.IIS
            // but are not running inprocess. Return at this point.
            return;
        }

        var detailedErrors         = Environment.GetEnvironmentVariable("ASPNETCORE_DETAILEDERRORS");
        var enableStartupErrorPage = detailedErrors?.Equals("1", StringComparison.OrdinalIgnoreCase) ?? false;

        enableStartupErrorPage |= detailedErrors?.Equals("true", StringComparison.OrdinalIgnoreCase) ?? false;

        var aspnetCoreEnvironment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

        enableStartupErrorPage |= aspnetCoreEnvironment?.Equals("Development", StringComparison.OrdinalIgnoreCase) ?? false;

        var dotnetEnvironment = Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT");

        enableStartupErrorPage |= dotnetEnvironment?.Equals("Development", StringComparison.OrdinalIgnoreCase) ?? false;

        if (!enableStartupErrorPage)
        {
            // Not running in development or detailed errors aren't enabled
            return;
        }

        AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) =>
        {
            var exception = (Exception)eventArgs.ExceptionObject;

            // Get the content root from IIS.
            var iisConfigData = NativeMethods.HttpGetApplicationProperties();
            var contentRoot   = iisConfigData.pwzFullApplicationPath.TrimEnd(Path.DirectorySeparatorChar);

            var model = new ErrorPageModel
            {
                RuntimeDisplayName = RuntimeInformation.FrameworkDescription
            };

            var systemRuntimeAssembly = typeof(System.ComponentModel.DefaultValueAttribute).Assembly;
            var assemblyVersion       = new AssemblyName(systemRuntimeAssembly.FullName).Version.ToString();
            var clrVersion            = assemblyVersion;
            model.RuntimeArchitecture = RuntimeInformation.ProcessArchitecture.ToString();
            var currentAssembly = typeof(ErrorPage).Assembly;
            model.CurrentAssemblyVesion = currentAssembly
                                          .GetCustomAttribute <AssemblyInformationalVersionAttribute>()
                                          .InformationalVersion;
            model.ClrVersion = clrVersion;
            model.OperatingSystemDescription = RuntimeInformation.OSDescription;

            var exceptionDetailProvider = new ExceptionDetailsProvider(
                new PhysicalFileProvider(contentRoot),
                logger: null,
                sourceCodeLineCount: 6);

            // The startup hook is only present when detailed errors are allowed, so
            // we can turn on all the details.
            model.ErrorDetails       = exceptionDetailProvider.GetDetails(exception);
            model.ShowRuntimeDetails = true;

            var errorPage = new ErrorPage(model);

            var stream = new MemoryStream();

            // Never will go async because we are writing to a memory stream.
            errorPage.ExecuteAsync(stream).GetAwaiter().GetResult();

            // Get the raw content and set the error page.
            stream.Position = 0;
            var content = stream.ToArray();

            NativeMethods.HttpSetStartupErrorPageContent(content);
        };
    }
Exemplo n.º 29
0
        private RequestDelegate BuildApplication()
        {
            try
            {
                EnsureApplicationServices();
                EnsureServer();

                var builderFactory = _applicationServices.GetRequiredService <IApplicationBuilderFactory>();
                var builder        = builderFactory.CreateBuilder(Server.Features);
                builder.ApplicationServices = _applicationServices;

                var startupFilters = _applicationServices.GetService <IEnumerable <IStartupFilter> >();
                Action <IApplicationBuilder> configure = _startup.Configure;
                foreach (var filter in startupFilters.Reverse())
                {
                    configure = filter.Configure(configure);
                }

                configure(builder);

                return(builder.Build());
            }
            catch (Exception ex) when(_options.CaptureStartupErrors)
            {
                // EnsureApplicationServices may have failed due to a missing or throwing Startup class.
                if (_applicationServices == null)
                {
                    _applicationServices = _applicationServiceCollection.BuildServiceProvider();
                }

                EnsureServer();

                // Write errors to standard out so they can be retrieved when not in development mode.
                Console.Out.WriteLine("Application startup exception: " + ex.ToString());
                var logger = _applicationServices.GetRequiredService <ILogger <WebHost> >();

                logger.ApplicationError(ex);

                // Generate an HTML error page.
                var hostingEnv         = _applicationServices.GetRequiredService <IHostingEnvironment>();
                var showDetailedErrors = hostingEnv.IsDevelopment() || _options.DetailedErrors;

                var model       = new ErrorPageModel();
                var runtimeType = Microsoft.Extensions.Internal.RuntimeEnvironment.RuntimeType;

                model.RuntimeDisplayName = (runtimeType == "CoreCLR") ? ".NET Core" : runtimeType == "CLR" ? ".NET Framework" : "Mono";
#if NETSTANDARD1_3 || NETSTANDARD1_5
                var systemRuntimeAssembly = typeof(System.ComponentModel.DefaultValueAttribute).GetTypeInfo().Assembly;
                var assemblyVersion       = new AssemblyName(systemRuntimeAssembly.FullName).Version.ToString();
                var clrVersion            = assemblyVersion;
#else
                var clrVersion = Environment.Version.ToString();
#endif
                model.RuntimeArchitecture = RuntimeInformation.ProcessArchitecture.ToString();
                var currentAssembly = typeof(ErrorPage).GetTypeInfo().Assembly;
                model.CurrentAssemblyVesion = currentAssembly
                                              .GetCustomAttribute <AssemblyInformationalVersionAttribute>()
                                              .InformationalVersion;
                model.ClrVersion = clrVersion;
                model.OperatingSystemDescription = RuntimeInformation.OSDescription;

                if (showDetailedErrors)
                {
                    var exceptionDetailProvider = new ExceptionDetailsProvider(
                        hostingEnv.ContentRootFileProvider,
                        sourceCodeLineCount: 6);

                    model.ErrorDetails = exceptionDetailProvider.GetDetails(ex);
                }
                else
                {
                    model.ErrorDetails = new ExceptionDetails[0];
                }

                var errorPage = new ErrorPage(model);
                return(context =>
                {
                    context.Response.StatusCode = 500;
                    context.Response.Headers["Cache-Control"] = "no-cache";
                    return errorPage.ExecuteAsync(context);
                });
            }
        }