Exemple #1
0
        public void Clone()
        {
            NameValueCollection actual = NameValueCollectionUtility.Clone(_collection);

            Assert.That(actual, Is.Not.Null);
            Assert.That(ReferenceEquals(_collection, actual), Is.False);
            Assert.That(actual.Count, Is.EqualTo(3));

            Assert.That(actual.GetKey(0), Is.EqualTo("FirstKey"));
            Assert.That(actual.GetKey(1), Is.EqualTo("SecondKey"));
            Assert.That(actual.GetKey(2), Is.EqualTo("ThirdKey"));

            Assert.That(actual["FirstKey"], Is.EqualTo("FirstValue"));
            Assert.That(actual["SecondKey"], Is.EqualTo("SecondValue"));
            Assert.That(actual["ThirdKey"], Is.EqualTo("ThirdValue,Other ThirdValue"));
        }
        public WxeContext(HttpContextBase context, WxeFunctionStateManager functionStateManager, WxeFunctionState functionState, NameValueCollection queryString)
        {
            ArgumentUtility.CheckNotNull("context", context);
            ArgumentUtility.CheckNotNull("functionStateManager", functionStateManager);
            ArgumentUtility.CheckNotNull("functionState", functionState);

            _httpContext          = context;
            _functionStateManager = functionStateManager;

            _functionState = functionState;

            if (queryString == null)
            {
                _queryString = new NameValueCollection();
            }
            else
            {
                _queryString = NameValueCollectionUtility.Clone(queryString);
                _queryString.Remove(WxeHandler.Parameters.WxeFunctionToken);
            }
        }
        /// <summary> Gets the absolute path that resumes the function with specified token. </summary>
        /// <param name="path"> The path to the <see cref="WxeHandler"/>. Must not be <see langword="null"/> or emtpy. </param>
        /// <param name="functionToken">
        ///   The function token of the function to resume. Must not be <see langword="null"/> or emtpy.
        /// </param>
        /// <param name="queryString"> An optional list of URL parameters to be appended to the <paramref name="path"/>. </param>
        private string GetPath(string path, string functionToken, NameValueCollection queryString)
        {
            ArgumentUtility.CheckNotNullOrEmpty("path", path);
            ArgumentUtility.CheckNotNullOrEmpty("functionToken", functionToken);

            if (path.IndexOf("?") != -1)
            {
                throw new ArgumentException("The path must be provided without a query string. Use the query string parameter instead.", "path");
            }

            if (queryString == null)
            {
                queryString = new NameValueCollection();
            }
            else
            {
                queryString = NameValueCollectionUtility.Clone(queryString);
            }

            queryString.Set(WxeHandler.Parameters.WxeFunctionToken, functionToken);

            path = UrlUtility.GetAbsoluteUrl(_httpContext, path);
            return(UrlUtility.AddParameters(path, queryString, _httpContext.Response.ContentEncoding));
        }
        private static string GetExternalFunctionUrl(WxeFunction function, bool createPermaUrl, NameValueCollection urlParameters)
        {
            string functionToken = WxeContext.Current.GetFunctionTokenForExternalFunction(function, false);

            NameValueCollection internalUrlParameters;

            if (urlParameters == null)
            {
                if (createPermaUrl)
                {
                    internalUrlParameters = function.VariablesContainer.SerializeParametersForQueryString();
                }
                else
                {
                    internalUrlParameters = new NameValueCollection();
                }
            }
            else
            {
                internalUrlParameters = NameValueCollectionUtility.Clone(urlParameters);
            }
            internalUrlParameters.Set(WxeHandler.Parameters.WxeFunctionToken, functionToken);
            return(WxeContext.GetPermanentUrl(WxeContext.Current.HttpContext, function.GetType(), internalUrlParameters));
        }
        /// <summary>
        ///   Gets the permanent URL for the <see cref="WxeFunction"/> of the specified <paramref name="functionType"/>
        ///   and using the <paramref name="urlParameters"/>.
        /// </summary>
        /// <include file='..\doc\include\ExecutionEngine\WxeContext.xml' path='WxeContext/GetPermanentUrl/param[@name="httpContext" or @name="functionType" or @name="urlParameters" or @name="fallbackOnCurrentUrl"]' />
        protected static string GetPermanentUrl(HttpContextBase httpContext, Type functionType, NameValueCollection urlParameters, bool fallbackOnCurrentUrl)
        {
            ArgumentUtility.CheckNotNull("httpContext", httpContext);
            ArgumentUtility.CheckNotNull("functionType", functionType);
            if (!typeof(WxeFunction).IsAssignableFrom(functionType))
            {
                throw new ArgumentException(string.Format("The functionType '{0}' must be derived from WxeFunction.", functionType), "functionType");
            }
            ArgumentUtility.CheckNotNull("urlParameters", urlParameters);

            NameValueCollection internalUrlParameters = NameValueCollectionUtility.Clone(urlParameters);

            UrlMapping.UrlMappingEntry mappingEntry = UrlMapping.UrlMappingConfiguration.Current.Mappings[functionType];
            if (mappingEntry == null)
            {
                string functionTypeName = WebTypeUtility.GetQualifiedName(functionType);
                internalUrlParameters.Set(WxeHandler.Parameters.WxeFunctionType, functionTypeName);
            }

            string path;

            if (mappingEntry == null)
            {
                string defaultWxeHandler = Configuration.WebConfiguration.Current.ExecutionEngine.DefaultWxeHandler;
                if (string.IsNullOrEmpty(defaultWxeHandler))
                {
                    if (fallbackOnCurrentUrl)
                    {
                        path = httpContext.Request.Url.AbsolutePath;
                    }
                    else
                    {
                        throw new WxeException(
                                  string.Format(
                                      "No URL mapping has been defined for WXE Function '{0}', nor has a default WxeHandler URL been specified in the application configuration (web.config).",
                                      functionType.FullName));
                    }
                }
                else
                {
                    path = defaultWxeHandler;
                }
            }
            else
            {
                path = mappingEntry.Resource;
            }

            string permanentUrl = UrlUtility.GetAbsoluteUrl(httpContext, path)
                                  + UrlUtility.FormatQueryString(internalUrlParameters, httpContext.Response.ContentEncoding);

            int maxLength = Configuration.WebConfiguration.Current.ExecutionEngine.MaximumUrlLength;

            if (permanentUrl.Length > maxLength)
            {
                throw new WxePermanentUrlTooLongException(
                          string.Format(
                              "Error while creating the permanent URL for WXE function '{0}'. "
                              + "The URL exceeds the maximum length of {1} bytes. Generated URL: {2}",
                              functionType.Name,
                              maxLength,
                              permanentUrl));
            }

            return(permanentUrl);
        }