示例#1
0
        public override void ExecuteResult(ControllerContext context)
        {
            var response = context.HttpContext.Response;
            var request  = context.HttpContext.Request;

            // TODO: Add logic for not authorized requests
            string viewName = StatusCode == HttpStatusCode.NotFound ? NotFoundView : ErrorView;

            // We need to clear both headers and content
            // because Clear() doesn't clear the headers
            // see: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.clear.aspx
            response.ClearHeaders();
            response.ClearContent();
            response.StatusCode = (int)StatusCode;

            // Certain versions of IIS will sometimes use their own error page when
            // they detect a server error. Setting this property indicates that we
            // want it to try to render ASP.NET MVC's error page instead.
            response.TrySkipIisCustomErrors = true;

            if (request.IsAjaxRequest())
            {
                // TODO: Add logic for AJAX requests
            }

            var viewResult = new ViewResult
            {
                ViewName = viewName,
                ViewData = ViewData ?? new ViewDataDictionary()
            };

            viewResult.ExecuteResult(context);
        }
示例#2
0
        public override void ExecuteResult(ControllerContext context)
        {
            CommandResult resultadobackendClient = null;

            if (context.Controller.ViewData.ModelState.IsValid)
            {
                var backendClient = ObjectFactory.GetInstance <IBackendClient>();
                try
                {
                    resultadobackendClient = backendClient.ExecuteCommand(command);
                }
                catch (FaultException <CommandFault> e)
                {
                    foreach (var error in e.Detail.CommandErrors)
                    {
                        context.Controller.ViewData.ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
                    }
                }
            }

            if (!context.Controller.ViewData.ModelState.IsValid)
            {
                errorView.ViewData = context.Controller.ViewData;
                errorView.TempData = context.Controller.TempData;
                errorView.ExecuteResult(context);
                return;
            }
            //context.Controller.TempData["Resultado"] = "OK";
            context.Controller.TempData["ResultadoCommand"] = resultadobackendClient;
            successAction.ExecuteResult(context);
        }
示例#3
0
        public override void ExecuteResult(ControllerContext context)
        {
            context.Controller.ViewData.Model = Model;

            if (context.HttpContext.Request.IsAjaxRequest())
            {
                var view = new PartialViewResult
                {
                    ViewName = GetAjaxViewName(context),
                    ViewData = context.Controller.ViewData
                };

                view.ExecuteResult(context);
            }
            else
            {
                var view = new ViewResult
                {
                    ViewName = GetViewName(context),
                    ViewData = context.Controller.ViewData
                };

                view.ExecuteResult(context);
            }
        }
        public override void ExecuteResult(ControllerContext context)
        {
            _razorViewResult.ViewData["MvcViewName"] = GetViewName(context.RouteData, ViewName);
            _razorViewResult.ViewName = "RazorBridgeView";

            _razorViewResult.ExecuteResult(context);
        }
示例#5
0
        protected string RenderActionResultToString(ViewResult result)
        {
            result.ViewName = "AjaxAbmcImprimir";

            // Create memory writer.
            var sb        = new StringBuilder();
            var memWriter = new StringWriter(sb);

            // Create fake http context to render the view.
            var fakeResponse = new HttpResponse(memWriter);
            var fakeContext  = new HttpContext(System.Web.HttpContext.Current.Request,
                                               fakeResponse);
            var fakeControllerContext = new ControllerContext(
                new HttpContextWrapper(fakeContext),
                ControllerContext.RouteData,
                ControllerContext.Controller);
            var oldContext = System.Web.HttpContext.Current;

            System.Web.HttpContext.Current = fakeContext;

            // Render the view.
            result.ExecuteResult(fakeControllerContext);

            // Restore old context.
            System.Web.HttpContext.Current = oldContext;

            // Flush memory and return output.
            memWriter.Flush();
            return(sb.ToString());
        }
示例#6
0
        protected void Application_Error()
        {
            //Source: http://forums.asp.net/t/1505777.aspx?Error+Handling+in+global+asax
            //modified to return JSON if IsAjaxRequest is true
            HttpContext ctx = HttpContext.Current;
            KeyValuePair <string, object> lastError = new KeyValuePair <string, object>("ErrorMessage", ctx.Server.GetLastError().Message.ToString());

            ctx.Response.Clear();

            if (new HttpRequestWrapper(System.Web.HttpContext.Current.Request).IsAjaxRequest())
            {
                Response.Write(JsonConvert.SerializeObject(new
                {
                    error   = true,
                    message = "Exception: " + lastError.Value.ToString()
                })
                               );
            }
            else
            {
                RequestContext     rc             = ((MvcHandler)ctx.CurrentHandler).RequestContext;
                string             controllerName = rc.RouteData.GetRequiredString("controller");
                IControllerFactory factory        = ControllerBuilder.Current.GetControllerFactory();
                IController        controller     = factory.CreateController(rc, controllerName);
                ControllerContext  cc             = new ControllerContext(rc, (ControllerBase)controller);

                ViewResult viewResult = new ViewResult {
                    ViewName = "Error"
                };
                viewResult.ViewData.Add(lastError);
                viewResult.ExecuteResult(cc);
            }

            ctx.Server.ClearError();
        }
示例#7
0
        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var response = context.HttpContext.Response;
            var request = context.HttpContext.Request;

            var requestedUrl = GetRequestedUrl(request);
            NotFoundConfig.OnNotFound(context.RequestContext.HttpContext.Request, new Uri(requestedUrl));
            this.ViewData["RequestedUrl"] = requestedUrl;
            this.ViewData["ReferrerUrl"] = GetReferrerUrl(request, request.Url.OriginalString);

            // Make sure the status code is 404 for the search engine bots
            response.StatusCode = 404;

            // Prevent IIS7 from overwriting our error page!
            response.TrySkipIisCustomErrors = true;

            var viewResult = new ViewResult
            {
                ViewName = this.ViewName,
                ViewData = this.ViewData
            };
            response.Clear();
            viewResult.ExecuteResult(context);
        }
示例#8
0
        public static void CaptureViewOutput(Controller controller, ViewResult view, StreamWriter streamWriter)
        {
            var currentContext = controller.ControllerContext.HttpContext;

            try
            {
                // get the Request and User objects from the current, unchanged context
                var currentRequest = HttpContext.Current.ApplicationInstance.Context.Request;
                var currentUser    = HttpContext.Current.ApplicationInstance.Context.User;

                // create our new HttpResponse object containing our HtmlTextWriter
                var newResponse = new HttpResponse(streamWriter);

                // create a new HttpContext object using our new Response object and the existing Request and User objects
                var newContext = new HttpContextWrapper(
                    new HttpContext(currentRequest, newResponse)
                {
                    User = currentUser
                });

                // swap in our new HttpContext object - output from this controller is now going to our HtmlTextWriter object
                controller.ControllerContext.HttpContext = newContext;

                // Run the ViewResult
                view.ExecuteResult(controller.ControllerContext);

                // flush the output
                newResponse.Flush();
            }
            finally
            {
                // and no matter what happens, set the context back!
                controller.ControllerContext.HttpContext = currentContext;
            }
        }
示例#9
0
        protected void Application_Error()
        {
            var ex = Server.GetLastError();

            //log the error!
            ErrorManager.WriteToErrorLog("", "", ex.Message, ex.HResult);

            HttpContext ctx = HttpContext.Current;
            KeyValuePair <string, object> error = new KeyValuePair <string, object>("ErrorMessage", ctx.Server.GetLastError().ToString());

            ctx.Response.Clear();
            RequestContext     rc             = ((MvcHandler)ctx.CurrentHandler).RequestContext;
            string             controllerName = rc.RouteData.GetRequiredString("controller");
            IControllerFactory factory        = ControllerBuilder.Current.GetControllerFactory();
            IController        controller     = factory.CreateController(rc, controllerName);
            ControllerContext  cc             = new ControllerContext(rc, (ControllerBase)controller);

            ViewResult viewResult = new ViewResult {
                ViewName = "Error"
            };

            viewResult.ViewData.Add(error);
            viewResult.ExecuteResult(cc);
            ctx.Server.ClearError();
            //ctx.Response.End();
        }
示例#10
0
            public override void OnException(ExceptionContext filterContext)
            {
                var controller = filterContext.Controller as Controller;

                controller.Response.StatusCode             = (int)System.Net.HttpStatusCode.InternalServerError;
                controller.Response.TrySkipIisCustomErrors = true;
                filterContext.ExceptionHandled             = true;

                var controllerName = (string)filterContext.RouteData.Values["controller"];
                var actionName     = (string)filterContext.RouteData.Values["action"];
                var exception      = filterContext.Exception;
                var model          = new HandleErrorInfo(exception, controllerName, actionName);
                var view           = new ViewResult();

                view.ViewName       = "Error";
                view.ViewData       = new ViewDataDictionary();
                view.ViewData.Model = model;

                // capture model data
                var viewData = controller.ViewData;

                if (viewData != null && viewData.Count > 0)
                {
                    viewData.ToList().ForEach(view.ViewData.Add);
                }

                // Show error
                view.ExecuteResult(filterContext);

                // log error
                Log.Error("Uncaught exception", exception);
            }
 private static void MockExecuteResult(ErrorController controller, ViewResult result)
 {
     try {
         result.View = Mock.Of <IView>();
         result.ExecuteResult(controller.ControllerContext);
     } catch { }
 }
    public override void OnException(ExceptionContext filterContext)
    {
        var controller = filterContext.Controller as Controller;

        controller.Response.StatusCode             = (int)System.Net.HttpStatusCode.InternalServerError;
        controller.Response.TrySkipIisCustomErrors = true;
        filterContext.ExceptionHandled             = true;
        var controllerName = (string)filterContext.RouteData.Values["controller"];
        var actionName     = (string)filterContext.RouteData.Values["action"];
        var exception      = filterContext.Exception;
        //need a model to pass exception data to error view
        var model = new HandleErrorInfo(exception, controllerName, actionName);
        var view  = new ViewResult();

        view.ViewName       = "Error";
        view.ViewData       = new ViewDataDictionary();
        view.ViewData.Model = model;
        //copy any view data from original control over to error view
        //so they can be accessible.
        var viewData = controller.ViewData;

        if (viewData != null && viewData.Count > 0)
        {
            viewData.ToList().ForEach(view.ViewData.Add);
        }
        //Instead of this
        ////filterContext.Result = view;
        //Allow the error view to display on the same URL the error occurred
        view.ExecuteResult(filterContext);
        //should do any logging after view has already been rendered for improved performance.
        //_logger.Error("Uncaught exception", exception);
    }
示例#13
0
        public override void ExecuteResult(ControllerContext context)
        {
            var contentType = context.RequestContext.HttpContext.Request.Headers["Accept"];

            if (contentType != null && contentType.Contains("application/json"))
            {
                if (Model is IEnumerable && !(Model is string))
                {
                    Model = new CollectionWrapper {
                        Collection = (IEnumerable)Model
                    };
                }
                var result = new JsonResult {
                    Data = Model, JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };
                result.ExecuteResult(context);
            }
            else
            {
                context.Controller.ViewData.Model = Model;
                var result = new ViewResult {
                    ViewData = context.Controller.ViewData
                };
                result.ExecuteResult(context);
            }
        }
示例#14
0
        /// <summary>
        /// Render error view
        /// </summary>
        /// <param name="ctx">HttpContext</param>
        /// <param name="view">View name</param>
        /// <param name="viewData">For ViewData</param>
        public static void HandleError(this HttpContext ctx, string view, object viewData)
        {
            if (ctx == null)
            {
                throw new ArgumentNullException("ctx");
            }
            if (view == null)
            {
                throw new ArgumentNullException("view");
            }
            ctx.Response.Clear();

            RequestContext     rc             = ((MvcHandler)ctx.CurrentHandler).RequestContext;
            string             controllerName = rc.RouteData.GetRequiredString("controller");
            IControllerFactory factory        = ControllerBuilder.Current.GetControllerFactory();
            IController        controller     = factory.CreateController(rc, controllerName);
            ControllerContext  cc             = new ControllerContext(rc, (ControllerBase)controller);
            ViewResult         viewResult     = new ViewResult {
                ViewName = view
            };

            if (viewData != null)
            {
                foreach (var kv in viewData.ToDictionary())
                {
                    viewResult.ViewData.Add(kv.Key, kv.Value);
                }
            }
            viewResult.ExecuteResult(cc);
            ctx.Server.ClearError();
        }
示例#15
0
        private static string RenderToString(ViewResult result, ControllerContext controllerContext)
        {
            StringWriter writer        = new StringWriter();
            ViewContext  viewContext   = new ViewContext(controllerContext, new WebFormView(controllerContext, "omg"), result.ViewData, result.TempData, writer);
            var          blockRenderer = new BlockRenderer(controllerContext.HttpContext);

            result.ExecuteResult(controllerContext);

            //HtmlHelper h = new HtmlHelper(new ViewContext(controllerContext, new WebFormView("omg"), result.ViewData, result.TempData, ), new ViewPage());
            //var blockRenderer = new BlockRenderer(controllerthis.db.HttpContext);

            //result.ExecuteResult(controllerContext);
            string s = blockRenderer.Capture(
                () => result.ExecuteResult(controllerContext)
                );

            return(s);
        }
        public override void ExecuteResult(ActionContext context)
        {
            ITempDataDictionaryFactory factory  = context.HttpContext.RequestServices.GetService(typeof(ITempDataDictionaryFactory)) as ITempDataDictionaryFactory;
            ITempDataDictionary        tempData = factory.GetTempData(context.HttpContext);

            tempData.SetViewModel(_jsonModel);
            tempData.SetViewModelProp(_contextProp);
            _innerResult.ExecuteResult(context);
        }
示例#17
0
        private new ActionResult View(string viewFolder, string viewName, object model = null)
        {
            var view = new ViewResult();

            view.TempData       = TempData;
            view.ViewName       = (viewFolder != null ? ("~/Views/" + viewFolder + "/" + viewName + ".cshtml") : viewName);
            view.ViewData       = ViewData;
            view.ViewData.Model = model;
            view.ExecuteResult(ControllerContext);
            return(null);
        }
示例#18
0
        public override void Execute(object model, ControllerContext context)
        {
            context.HttpContext = new HttpContextWrapper(HttpContext.Current);
            var viewResult = new ViewResult {
                TempData = context.Controller.TempData, ViewData = context.Controller.ViewData
            };

            viewResult.ViewData.Model = null;

            viewResult.ExecuteResult(context);
        }
示例#19
0
        private static string RenderViewToString(Controller controller, ViewResult viewResult)
        {
            viewResult.ExecuteResult(controller.ControllerContext);
            IView view = viewResult.View;

            using (StringWriter writer = new StringWriter())
            {
                ViewContext viewContext = new ViewContext(controller.ControllerContext, view, controller.ViewData, controller.TempData, writer);
                viewContext.View.Render(viewContext, writer);
                return(writer.ToString());
            }
        }
示例#20
0
        protected void Application_Error(object sender, EventArgs e)
        {
            HttpContext httpContext = HttpContext.Current;

            // Для администратора отображаем стандартный вывод ошибки
            if (httpContext.User != null &&
                httpContext.User.Identity != null &&
                httpContext.User.Identity.IsAuthenticated)
            {
                return;
            }

            Exception ex = httpContext.Server.GetLastError();

            httpContext.Response.Clear();

            if (new HttpRequestWrapper(Request).IsAjaxRequest())
            {
                Response.StatusCode  = 500;
                Response.ContentType = "application/json";
                Response.Write(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(new
                {
                    errorMessage = ex.Message
                }));

                return;
            }

            RequestContext requestContext = ((MvcHandler)httpContext.CurrentHandler).RequestContext;
            IController    controller     = new HomeController();
            var            context        = new ControllerContext(requestContext, (ControllerBase)controller);

            ViewResult    viewResult    = new ViewResult();
            HttpException httpException = ex as HttpException;

            if (httpException != null)
            {
                viewResult.ViewBag.HttpCode = httpException.GetHttpCode();

                // Исправляем ошибку ELMAH (Request Validation errors does not get logged)
                // https://code.google.com/p/elmah/issues/detail?id=217
                if (httpException is HttpRequestValidationException)
                {
                    Elmah.ErrorLog.GetDefault(httpContext).Log(new Error(httpException));
                }
            }

            viewResult.ViewName       = "Error";
            viewResult.ViewData.Model = new HandleErrorInfo(ex, context.RouteData.GetRequiredString("controller"), context.RouteData.GetRequiredString("action"));
            viewResult.ExecuteResult(context);
            httpContext.ClearError();
        }
示例#21
0
        /// <summary>
        /// Handle 404 exception and redirect it to the 404 error page, and fallback to NotFoundError view
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnException(ExceptionContext filterContext)
        {
            //handle 404 exception
            if (filterContext.Exception is HttpException)
            {
                HttpException httpException = filterContext.Exception as HttpException;
                if (httpException.GetHttpCode() == 404)
                {
                    filterContext.HttpContext.Response.StatusCode = 404;
                    //add 404 page handling specified by url map

                    string error404PageId = _PageFactory.UrlMap
                                            .ToNullHelper()
                                            .Propagate(
                        urlMap => urlMap.Error404PageId)
                                            .Return(string.Empty);

                    if (!string.IsNullOrEmpty(error404PageId))
                    {
                        CMSPageRequest page404 = _PageFactory.GetPage(Request, error404PageId) as CMSPageRequest;
                        if (page404 != null && page404.Exists)
                        {
                            filterContext.ExceptionHandled = true;

                            ActionResult result404 = viewOrXsltFallback(page404);
                            result404.ExecuteResult(ControllerContext);
                            return;
                        }
                    }

                    //go to provided Error view, structured url map 404 page is not used, only if the view exists
                    //otherwise, use base procedure
                    ViewResult viewResult = View("NotFoundError", new Error404()
                    {
                        Title    = Ingeniux.Runtime.Properties.Resources.Error404Title,
                        BodyCopy = Ingeniux.Runtime.Properties.Resources.Error404BodyCopy,
                        Factory  = _PageFactory
                    });

                    ViewEngineResult viewEngineResult = viewResult.ViewEngineCollection.FindView(ControllerContext, viewResult.ViewName, viewResult.MasterName);
                    if (viewEngineResult != null && viewEngineResult.View != null && viewEngineResult.ViewEngine != null)
                    {
                        filterContext.ExceptionHandled = true;

                        viewResult.ExecuteResult(ControllerContext);
                        return;
                    }
                }
            }

            base.OnException(filterContext);
        }
示例#22
0
    public override void ExecuteResult(ControllerContext context)
    {
        var isAjaxRequest = context.HttpContext.Request["isAjax"];

        if (isAjaxRequest != null && isAjaxRequest.ToLower() == "true")
        {
            _ajaxActionResult.ExecuteResult(context);
        }
        else
        {
            _viewResult.ExecuteResult(context);
        }
    }
        public override void ExecuteResult(ControllerContext context)
        {
            base.ExecuteResult(context);

            ViewResult result = new ViewResult
            {
                ViewName = @"AccessDenied",
                ViewData = context.Controller.ViewData,
                TempData = context.Controller.TempData
            };

            result.ExecuteResult(context);
        }
示例#24
0
        private void OutputView(ControllerContext context)
        {
            var viewReasult = new ViewResult()
            {
                ViewName             = null,
                MasterName           = null,
                ViewData             = context.Controller.ViewData,
                TempData             = context.Controller.TempData,
                ViewEngineCollection = ViewEngines.Engines
            };

            viewReasult.ExecuteResult(context);
        }
    protected override void HandleUnknownAction(string actionName)
    {
        var data = ViewData;
        //Custom code to resolve the view.
        ViewResult view = this.View <ErrorController>(c => c.NotFound());

        if (data != null && data.Count > 0)
        {
            data.ToList().ForEach(view.ViewData.Add);
        }
        Response.StatusCode             = (int)System.Net.HttpStatusCode.NotFound;
        Response.TrySkipIisCustomErrors = true;
        view.ExecuteResult(this.ControllerContext);
    }
示例#26
0
        public static void RenderView(this DirectControllerAction controllerAction, IView view, TextWriter writer)
        {
            var controllerContext = controllerAction.CreateControllerContext();

            controllerContext.HttpContext.Response.Output = writer;

            var viewResult = new ViewResult
            {
                View = view,
                ViewEngineCollection = controllerAction.MvcApplication.ViewEngines
            };

            viewResult.ExecuteResult(controllerContext);
        }
示例#27
0
        protected virtual void ExecuteCommonResult(ControllerContext context)
        {
            context.Controller.ViewData.Model = m_Message;
            var result = new ViewResult
            {
                ViewName             = m_ViewName,
                MasterName           = null,
                ViewData             = context.Controller.ViewData,
                TempData             = context.Controller.TempData,
                ViewEngineCollection = ((Controller)context.Controller).ViewEngineCollection
            };

            result.ExecuteResult(context);
        }
示例#28
0
        protected override void HandleUnknownAction(string actionName)
        {
            var controllerName = (string)RouteData.Values["controller"];
            var ex             = Server.GetLastError();
            var model          = new HttpErrorViewModel(ex ?? new HttpException(500, "Something went wrong."), controllerName, actionName);
            var result         = new ViewResult
            {
                ViewName = "~/Views/Error/Index.cshtml",
                ViewData = new ViewDataDictionary <HttpErrorViewModel>(model),
            };


            Response.StatusCode = model.StatusCode;
            result.ExecuteResult(ControllerContext);
        }
示例#29
0
        public void OnException(ExceptionContext context)
        {
            if (!context.ExceptionHandled)
            {
                string          controller = context.RouteData.Values["controller"].ToString();
                string          action     = context.RouteData.Values["action"].ToString();
                HandleErrorInfo boj        = new HandleErrorInfo(context.Exception, controller, action);
                var             view       = new ViewResult();
                view.ViewName       = "CustomError";
                view.ViewData       = new ViewDataDictionary();
                view.ViewData.Model = boj;
                view.ExecuteResult(context);

                context.ExceptionHandled = true;
            }
        }
        public override void OnException(ExceptionContext filterContext)
        {
            var controller = filterContext.Controller as Controller;

            controller.Response.StatusCode             = (int)System.Net.HttpStatusCode.InternalServerError;
            controller.Response.TrySkipIisCustomErrors = true;
            filterContext.ExceptionHandled             = true;

            var controllerName = (string)filterContext.RouteData.Values["controller"];
            var actionName     = (string)filterContext.RouteData.Values["action"];
            //var controllerName = "error";
            //var actionName = "handelError";
            var model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);

            if (filterContext.Exception is HttpAntiForgeryException)
            {
                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary
                {
                    { "action", "Login" },
                    { "controller", "Account" }
                });
            }
            else
            {
                var view = new ViewResult
                {
                    ViewName = "Errorhandler",
                    ViewData = new ViewDataDictionary()
                };

                view.ViewData.Model = model;

                //copy any view data from original control over to error view
                //so they can be accessible.
                var viewData = controller.ViewData;
                if (viewData != null && viewData.Count > 0)
                {
                    viewData.ToList().ForEach(view.ViewData.Add);
                }

                //Instead of this
                ////filterContext.Result = view;
                //Allow the error view to display on the same URL the error occurred
                view.ExecuteResult(filterContext);
            }
        }