public ReportViewerParameters Parse(NameValueCollection queryString)
        {
            if (queryString == null)
            {
                throw new ArgumentNullException("queryString");
            }

            var isEncrypted = CheckEncryption(ref queryString);

            var settinsManager = new ControlSettingsManager(isEncrypted);

            var parameters = InitializeDefaults();

            ResetDefaultCredentials(queryString, parameters);
            parameters.ControlSettings = settinsManager.Deserialize(queryString);

            foreach (var key in queryString.AllKeys)
            {
                var urlParam = queryString[key];
                if (key.EqualsIgnoreCase(UriParameters.ReportPath))
                {
                    parameters.ReportPath = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                }
                else if (key.EqualsIgnoreCase(UriParameters.ControlId))
                {
                    var parameter = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                    parameters.ControlId = Guid.Parse(parameter);
                }
                else if (key.EqualsIgnoreCase(UriParameters.ProcessingMode))
                {
                    var parameter = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                    parameters.ProcessingMode = (ProcessingMode)Enum.Parse(typeof(ProcessingMode), parameter);
                }
                else if (key.EqualsIgnoreCase(UriParameters.ReportServerUrl))
                {
                    parameters.ReportServerUrl = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                }
                else if (key.EqualsIgnoreCase(UriParameters.Username))
                {
                    parameters.Username = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                }
                else if (key.EqualsIgnoreCase(UriParameters.Password))
                {
                    parameters.Password = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                }
                else if (!settinsManager.IsControlSetting(key))
                {
                    var values = queryString.GetValues(key);
                    if (values != null)
                    {
                        foreach (var value in values)
                        {
                            var realValue = isEncrypted ? SecurityUtil.Decrypt(value) : value;
                            var parsedKey = ParseKey(key);
                            var realKey   = parsedKey.Item1;
                            var isVisible = parsedKey.Item2;

                            if (parameters.ReportParameters.ContainsKey(realKey))
                            {
                                parameters.ReportParameters[realKey].Values.Add(realValue);
                            }
                            else
                            {
                                var reportParameter = new ReportParameter(realKey);
                                reportParameter.Visible = isVisible;
                                reportParameter.Values.Add(realValue);
                                parameters.ReportParameters.Add(realKey, reportParameter);
                            }
                        }
                    }
                }
            }

            if (parameters.ProcessingMode == ProcessingMode.Remote &&
                string.IsNullOrEmpty(parameters.ReportServerUrl))
            {
                throw new MvcReportViewerException("Report Server is not specified.");
            }

            if (string.IsNullOrEmpty(parameters.ReportPath))
            {
                throw new MvcReportViewerException("Report is not specified.");
            }

            return(parameters);
        }
예제 #2
0
        public ReportViewerParameters Parse(NameValueCollection queryString)
        {
            if (queryString == null)
            {
                throw new ArgumentNullException("queryString");
            }

            var isEncrypted = CheckEncryption(ref queryString);

            var settinsManager = new ControlSettingsManager(isEncrypted);

            var parameters = InitializeDefaults();

            ResetDefaultCredentials(queryString, parameters);
            parameters.ControlSettings = settinsManager.Deserialize(queryString);

            foreach (var key in queryString.AllKeys)
            {
                var urlParam = queryString[key];
                if (key.EqualsIgnoreCase(UriParameters.ReportPath))
                {
                    parameters.ReportPath = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                }
                else if (key.EqualsIgnoreCase(UriParameters.ReportServerUrl))
                {
                    parameters.ReportServerUrl = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                }
                else if (key.EqualsIgnoreCase(UriParameters.Username))
                {
                    parameters.Username = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                }
                else if (key.EqualsIgnoreCase(UriParameters.Password))
                {
                    parameters.Password = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                }
                else if (key.EqualsIgnoreCase(UriParameters.Local))
                {
                    var  isLocalStringValue = isEncrypted ? SecurityUtil.Decrypt(urlParam) : urlParam;
                    bool isLocalValue;
                    if (Boolean.TryParse(isLocalStringValue, out isLocalValue))
                    {
                        parameters.IsLocal = isLocalValue;
                    }
                }
                else if (!settinsManager.IsControlSetting(key))
                {
                    var values = queryString.GetValues(key);
                    if (values != null)
                    {
                        foreach (var value in values)
                        {
                            var realValue = isEncrypted ? SecurityUtil.Decrypt(value) : value;

                            if (parameters.ReportParameters.ContainsKey(key))
                            {
                                parameters.ReportParameters[key].Values.Add(realValue);
                            }
                            else
                            {
                                var reportParameter = new ReportParameter(key);
                                reportParameter.Values.Add(realValue);
                                parameters.ReportParameters.Add(key, reportParameter);
                            }
                        }
                    }
                }
            }

            if (string.IsNullOrEmpty(parameters.ReportServerUrl))
            {
                throw new MvcReportViewerException("Report Server is not specified.");
            }

            if (string.IsNullOrEmpty(parameters.ReportPath))
            {
                throw new MvcReportViewerException("Report is not specified.");
            }

            return(parameters);
        }
예제 #3
0
        private string PrepareViewerUri()
        {
            var query = HttpUtility.ParseQueryString(string.Empty);

            query[UriParameters.ControlId]      = ControlId.ToString();
            query[UriParameters.ProcessingMode] = _processingMode.ToString();
            if (!string.IsNullOrEmpty(_reportPath))
            {
                query[UriParameters.ReportPath] = _reportPath;
            }

            if (!string.IsNullOrEmpty(_reportServerUrl))
            {
                query[UriParameters.ReportServerUrl] = _reportServerUrl;
            }

            if (!string.IsNullOrEmpty(_username) || !string.IsNullOrEmpty(_password))
            {
                query[UriParameters.Username] = _username;
                query[UriParameters.Password] = _password;
            }

            if (!string.IsNullOrEmpty(_eventsHandlerType))
            {
                query[UriParameters.EventsHandlerType] = _eventsHandlerType;
            }

            if (_dataSourceCredentials?.Length > 0)
            {
                query[UriParameters.DataSourceCredentials] = JsonConvert.SerializeObject(_dataSourceCredentials);
            }

            var frameHeight = GetFrameHeight();

            if (frameHeight != null)
            {
                if (_controlSettings == null)
                {
                    _controlSettings = new ControlSettings();
                }

                _controlSettings.FrameHeight = new Unit(frameHeight.Item1, frameHeight.Item2);
            }

            var serializedSettings = _settingsManager.Serialize(_controlSettings);

            foreach (var setting in serializedSettings)
            {
                query[setting.Key] = setting.Value;
            }

            if (_reportParameters != null)
            {
                foreach (var parameter in _reportParameters)
                {
                    if (parameter.Value == null)
                    {
                        continue;
                    }

                    var multiple = parameter.Value as IEnumerable;
                    if (parameter.Value is string || multiple == null)
                    {
                        var value = ConvertValueToString(parameter.Value);
                        query.Add(parameter.Key, value);
                    }
                    else
                    {
                        foreach (var v in multiple)
                        {
                            var value = ConvertValueToString(v);
                            query.Add(parameter.Key, value);
                        }
                    }
                }
            }

            string uri = _aspxViewer;

            if (query.Count == 0)
            {
                return(uri);
            }

            if (!_encryptParameters)
            {
                return(uri + "?" + query);
            }

            var encryptedQuery = UriParameters.Encrypted + "=" + SecurityUtil.Encrypt(query.ToString());

            return(uri + "?" + encryptedQuery);
        }
예제 #4
0
        private string PrepareViewerUri()
        {
            var query = HttpUtility.ParseQueryString(string.Empty);

            query[UriParameters.ControlId]      = ControlId.ToString();
            query[UriParameters.ProcessingMode] = _processingMode.ToString();
            if (!string.IsNullOrEmpty(_reportPath))
            {
                query[UriParameters.ReportPath] = _reportPath;
            }

            if (!string.IsNullOrEmpty(_reportServerUrl))
            {
                query[UriParameters.ReportServerUrl] = _reportServerUrl;
            }

            if (!string.IsNullOrEmpty(_username) || !string.IsNullOrEmpty(_password))
            {
                query[UriParameters.Username] = _username;
                query[UriParameters.Password] = _password;
            }

            var serializedSettings = _settingsManager.Serialize(_controlSettings);

            foreach (var setting in serializedSettings)
            {
                query[setting.Key] = setting.Value;
            }

            if (_reportParameters != null)
            {
                foreach (var parameter in _reportParameters)
                {
                    if (parameter.Value == null)
                    {
                        continue;
                    }

                    var multiple = parameter.Value as IEnumerable;
                    if (parameter.Value is string || multiple == null)
                    {
                        var value = ConvertValueToString(parameter.Value);
                        query.Add(parameter.Key, value);
                    }
                    else
                    {
                        foreach (var v in multiple)
                        {
                            var value = ConvertValueToString(v);
                            query.Add(parameter.Key, value);
                        }
                    }
                }
            }

            string uri = _aspxViewer;

            if (query.Count == 0)
            {
                return(uri);
            }

            if (!_encryptParameters)
            {
                return(uri + "?" + query);
            }

            var encryptedQuery = UriParameters.Encrypted + "=" + SecurityUtil.Encrypt(query.ToString());

            return(uri + "?" + encryptedQuery);
        }