コード例 #1
0
ファイル: AjaxHandler.cs プロジェクト: jeason0813/Mtn.Library
        /// <summary>
        /// <para>Process the requests.</para>
        /// </summary>
        /// <param name="context">
        /// <para>HttpContext.</para>
        /// </param>
        public virtual void ProcessRequest(HttpContext context)
        {
            string url = context.Request.RawUrl.ToLowerInvariant();

            if (AjaxEngine.WriteScript(url, context, webmodeType))
            {
                return;
            }

            AjaxEngine.ProcessRequest(context, webmodeType);
        }
コード例 #2
0
ファイル: MtnRoute.cs プロジェクト: jeason0813/Mtn.Library
        /// <summary>
        /// When overridden in a derived class, returns route information about the request.
        /// </summary>
        /// <exception cref="ArgumentOutOfRangeException"></exception>
        /// <returns>
        /// An object that contains the values from the route definition if the route matches the current request, or null if the route does not match the request.
        /// </returns>
        /// <param name="httpContext">An object that encapsulates information about the HTTP request.</param>
        public override RouteData GetRouteData(HttpContextBase httpContext)
        {
            if (httpContext.Request != null)
            {
                var url = httpContext.Request.RawUrl.ToLowerInvariant();

                if (url.Length < 1)
                {
                    return(null);
                }


                if (AjaxEngine.WriteScript(url, httpContext.ApplicationInstance.Context))
                {
                    return(null);
                }

                var urlAjax = (httpContext.Request.ApplicationPath != null && httpContext.Request.ApplicationPath.Length > 1 ? url.Replace(httpContext.Request.ApplicationPath.ToLowerInvariant(), "") : url);
                urlAjax = urlAjax.StartsWith("/") ? urlAjax.Remove(0, 1) : urlAjax;
                var routeAjaxName = (urlAjax.Contains("/") && urlAjax.Length > 1) ? urlAjax.SplitMtn("/")[0] : urlAjax.Replace("/", "");

                Parallel.ForEach(InterceptRoutes, interceptRoute =>
                {
                    #region Ajax Route
                    switch (interceptRoute.InterceptType)
                    {
                    case InterceptType.Ajax:
                        if (interceptRoute.RouteName == null)
                        {
                            throw new ArgumentNullException("httpContext", "RouteName - To InterceptType == Ajax you need set RouteName.");
                        }
                        if (interceptRoute.RouteName.ToLowerInvariant().Trim().Equals(routeAjaxName.ToLowerInvariant()))
                        {
                            AjaxEngine.ProcessRequest(httpContext.ApplicationInstance.Context, WebModeType.MvcController);
                        }
                        break;

                    case InterceptType.CustomRoute:
                        if (interceptRoute.CustomRedirect == null)
                        {
                            throw new ArgumentNullException("httpContext", "CustomRedirect - To InterceptType == CustomRoute you need a CustomRedirect Func.");
                        }
                        if (url.Replace("/", "").IsNullOrWhiteSpaceMtn() == false && interceptRoute.AcceptEmptyRoute)
                        {
                            var routeName = (url.Contains("/") && url.Length > 0 && interceptRoute.UrlType == UrlType.Route)
                                    ? url.SplitMtn("/")[0]
                                    : url;
                            var resUrl = interceptRoute.CustomRedirect(routeName);
                            if (resUrl == null)
                            {
                                return;
                            }

                            switch (resUrl.Code)
                            {
                            case RouteCode.Ok200:
                                httpContext.Response.StatusCode = 200;
                                if (resUrl.Html.IsNullOrWhiteSpaceMtn() == false)
                                {
                                    httpContext.Response.Write(resUrl.Html);
                                }
                                //httpContext.Response.End();
                                break;

                            case RouteCode.Redirect301:
                                httpContext.Response.StatusCode = 301;
                                httpContext.Response.RedirectPermanent(resUrl.RouteUrl, true);
                                //httpContext.Response.End();
                                break;

                            case RouteCode.Redirect302:
                                httpContext.Response.StatusCode = 302;
                                httpContext.Response.Redirect(resUrl.RouteUrl, true);
                                //httpContext.Response.End();
                                break;

                            case RouteCode.NotFound404:
                                httpContext.Response.StatusCode = 404;
                                if (resUrl.Html.IsNullOrWhiteSpaceMtn() == false)
                                {
                                    httpContext.Response.Write(resUrl.Html);
                                }
                                httpContext.Response.Status = "404 File not found!";
                                //httpContext.Response.End();
                                break;

                            case RouteCode.Error500:
                                httpContext.Response.StatusCode = 404;
                                httpContext.Response.Status     = "404 File not found!";
                                if (resUrl.Html.IsNullOrWhiteSpaceMtn() == false)
                                {
                                    httpContext.Response.Write(resUrl.Html);
                                }
                                //httpContext.Response.End();
                                break;

                            default:
                                throw new ArgumentOutOfRangeException("httpContext", "RouteCode");
                            }
                            httpContext.ApplicationInstance.CompleteRequest();
                        }
                        break;
                    }
                    #endregion
                });
            }

            return(null);
        }