コード例 #1
0
        public async Task <ActionResult> Measurements(MeasurementQueryModel query)
        {
            var sessionQuery = Session[querySessionKey] as MeasurementQueryModel;

            if (!ModelState.IsValid)
            {
                if (null == sessionQuery)
                {
                    return(View("Index", query));
                }
                query = sessionQuery;
            }
            Repository r = new Repository();

            try
            {
                var modelTask   = r.GetMeasurementsAsync(query);
                var sensorsTask = r.GetSensorsAsync(query.Key);

                ViewBag.Sensors          = await sensorsTask;
                Session[querySessionKey] = query;
                return(View(await modelTask));
            }
            catch (KeyNotFoundException kex)
            {
                return(HttpNotFound(kex.Message));
            }
            catch (UnauthorizedAccessException uex)
            {
                return(new HttpUnauthorizedResult(uex.Message));
            }
        }
コード例 #2
0
        public async Task <ActionResult> Details(long id)
        {
            Repository            r          = new Repository();
            MeasurementQueryModel queryModel = Session[querySessionKey] as MeasurementQueryModel;

            try
            {
                string        key     = null;
                List <string> sensors = null;
                if (null != queryModel)
                {
                    key     = queryModel.Key;
                    sensors = queryModel.DataTags();
                }
                var model = await r.GetMeasurementAsync(key, id, sensors);

                return(View(model));
            }
            catch (KeyNotFoundException kex)
            {
                return(HttpNotFound(kex.Message));
            }
            catch (UnauthorizedAccessException uex)
            {
                return(new HttpUnauthorizedResult(uex.Message));
            }
        }
コード例 #3
0
ファイル: PerformanceTests.cs プロジェクト: SavoniaUAS/SaMi
        public async Task ReadMeasurementsAsync()
        {
            using (Repository r = new Repository())
            {
                var query = new MeasurementQueryModel()
                {
                    Key  = readKey,
                    From = new DateTimeOffset(2015, 10, 25, 0, 0, 0, TimeSpan.FromHours(3)),
                    To   = new DateTimeOffset(2015, 10, 26, 0, 0, 0, TimeSpan.FromHours(2)),
                    Take = null
                };
                Stopwatch sw     = Stopwatch.StartNew();
                var       result = await r.GetMeasurementsAsync(query);

                sw.Stop();

                int expected = 79365;

                Trace.WriteLine(string.Format("Got {0} results in {1}.", result.Count, sw.Elapsed));
                var f = result.First();
                var l = result.Last();
                Trace.WriteLine(string.Format("First {0} and last {1}.", f.Timestamp, l.Timestamp));
                Assert.IsNotNull(result);
                Assert.AreEqual <int>(expected, result.Count);
                Assert.AreEqual <string>("25.10.2015 23:59:59 +02:00", f.Timestamp.ToString());
                Assert.AreEqual <string>("25.10.2015 0:00:01 +03:00", l.Timestamp.ToString());
            }
        }
コード例 #4
0
        // GET: api/Measurement/my-key?obj=some-object&tag=some-tag
        //public IHttpActionResult Get(MeasurementQueryModel query)
        public async Task <IHttpActionResult> Get(string key, string sensors, string obj, string tag, string take, string from, string to)
        {
            MeasurementQueryModel query = new MeasurementQueryModel()
            {
                Key     = key,
                Obj     = obj,
                Tag     = tag,
                Sensors = sensors,
                Take    = take.QueryParamToInt(),
                From    = from.QueryParamToDateTimeOffset(),
                To      = to.QueryParamToDateTimeOffset()
            };
            Repository r = new Repository();

            try
            {
                var model = await r.GetMeasurementsAsync(query, true);

                if (null == model)
                {
                    return(NotFound());
                }
                return(Ok(model));
            }
            catch (KeyNotFoundException)
            {
                return(NotFound());
            }
            catch (UnauthorizedAccessException)
            {
                return(Unauthorized());
            }
        }
コード例 #5
0
        public ActionResult Index()
        {
            MeasurementQueryModel model = Session[querySessionKey] as MeasurementQueryModel;

            if (null == model)
            {
                model = new MeasurementQueryModel();
            }
            return(View(model));
        }
コード例 #6
0
        public void WCFReadMeasurementsTop100()
        {
            MeasurementQueryModel q = new MeasurementQueryModel()
            {
                Key  = TestHelper.TestKey,
                Take = 100
            };

            this.WCFReadMeasurements(q, 100);
        }
コード例 #7
0
        public void WCFReadMeasurementsFromTo()
        {
            MeasurementQueryModel q = new MeasurementQueryModel()
            {
                Key  = TestHelper.TestKey,
                From = new DateTimeOffset(2014, 11, 26, 0, 0, 0, TimeSpan.FromHours(2)),
                To   = new DateTimeOffset(2014, 11, 27, 0, 0, 0, TimeSpan.FromHours(2))
            };

            this.WCFReadMeasurements(q, 13451);
        }
コード例 #8
0
        public async Task WCFReadMeasurementsFromToAsync()
        {
            MeasurementQueryModel q = new MeasurementQueryModel()
            {
                Key  = TestHelper.TestKey,
                From = new DateTimeOffset(2014, 11, 26, 0, 0, 0, TimeSpan.FromHours(2)),
                To   = new DateTimeOffset(2014, 11, 27, 0, 0, 0, TimeSpan.FromHours(2))
            };

            await this.WCFReadMeasurementsAsync(q, 13451);
        }
コード例 #9
0
ファイル: ExportController.cs プロジェクト: SavoniaUAS/SaMi
        public async Task <ActionResult> SaveQuery(MeasurementQueryModel query)
        {
            string c = "";

            if (string.IsNullOrEmpty(query?.Name))
            {
                ModelState.AddModelError("Name", "Name field is required!");
                c = " <div class='alert alert-warning fade in'><a class='close' data-dismiss='alert' aria-label='close'>&times;</a>Name field is required</div>";
                return(Content(c));
            }
            Helpers.LoginHelper lh = new Helpers.LoginHelper();
            query.Key = lh.GetAuthenticationKey(this.HttpContext);
            if (query.Key != null)
            {
                ModelState.Remove("key");
                ModelState.Add("Key", new ModelState());
                ModelState.SetModelValue("Key", new ValueProviderResult(query.Key, query.Key, System.Globalization.CultureInfo.CurrentCulture));
            }
            c = " <div class='alert alert-danger fade in'><a class='close' data-dismiss='alert' aria-label='close'>&times;</a><span class='text-info'><span class='text-success'>Query: " + query.Name + " was <strong>NOT</strong> Saved successfully!</span></span></div>";
            if (!ModelState.IsValid)
            {
                return(Content(c));
            }
            Repository      r          = new Repository();
            int             result     = 0;
            SavedQueryModel savedQuery = new SavedQueryModel();

            try
            {
                result = await r.SaveQueryAsync(query);

                if (result > 0)
                {
                    query.ID   = result;
                    savedQuery = new SavedQueryModel(query);
                }
                else if (result == -1)
                {
                    c = " <div class='alert alert-danger fade in'><a class='close' data-dismiss='alert' aria-label='close'>&times;</a><span class='text-info'><span class='text-success'>Queries cannot be saved with Master key!</span></span></div>";
                    return(Content(c));
                }
                else
                {
                    return(Content(c));
                }
            }
            catch (Exception ex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ex, System.Web.HttpContext.Current.Request);
                return(Content(c));
            }
            return(Json(savedQuery));
        }
コード例 #10
0
        private async Task WCFReadMeasurementsAsync(MeasurementQueryModel q, int expectedCount)
        {
            MeasurementsServiceClient client = new MeasurementsServiceClient();

            Stopwatch sw     = Stopwatch.StartNew();
            var       result = await client.GetMeasurementsAsync(q);

            sw.Stop();
            client.Close();

            Trace.WriteLine(string.Format("GetMeasurements with query {0} took {1} ms and returned {2} results.", GetQueryString(q), sw.ElapsedMilliseconds, result.Length));
            Assert.IsNotNull(result);
            Assert.AreEqual(expectedCount, result.Length);
        }
コード例 #11
0
        ///Gets at most last 200 measurements or measurements defined by queryParams from and to (ISO 8601)
        public async Task <IActionResult> Get(
            [FromRoute(Name = "deviceId")] string deviceId,
            [FromQuery] MeasurementQueryModel queryModel)
        {
            var watch = Stopwatch.StartNew();

            _logger.LogDebug(String.Format("Getting Measurements for serial number: {0}", deviceId));

            var measurements = await _measurementService.GetMeasurements(deviceId, queryModel.FromDate, queryModel.ToDate);

            watch.Stop();
            _logger.LogInformation(string.Format("Found {0} Measurements for serial number {1} in {2}ms", measurements.Count, deviceId, watch.ElapsedMilliseconds));

            return(Ok(measurements));
        }
コード例 #12
0
 public static Query ToQuery(this MeasurementQueryModel model, AccessKeyModel access)
 {
     return(new Query()
     {
         Key = access.Key.Hash(access.ProviderID.ToString()),
         ProviderID = access.ProviderID,
         Object = model.Obj,
         Tag = model.Tag,
         Take = model.Take,
         From = model.From,
         To = model.To,
         Sensors = model.Sensors,
         Name = model.Name,
         ID = model.ID
     });
 }
コード例 #13
0
        public async Task <List <MeasurementModel> > RestGetMeasurementsAsync(string key, string sensors, string obj, string tag, string take, string from, string to, string inclusiveFrom, string inclusiveTo)
        {
            MeasurementQueryModel query = new MeasurementQueryModel()
            {
                Key           = key,
                Obj           = obj,
                Tag           = tag,
                Sensors       = sensors,
                Take          = take.QueryParamToInt(),
                From          = from.QueryParamToDateTimeOffset(),
                To            = to.QueryParamToDateTimeOffset(),
                InclusiveFrom = inclusiveFrom.QueryParamToBoolean(true),
                InclusiveTo   = inclusiveTo.QueryParamToBoolean(true)
            };

            return(await this.GetMeasurementsAsync(query));
        }
コード例 #14
0
        public async Task GetAndSetSensors()
        {
            try
            {
                MeasurementQueryModel q = new MeasurementQueryModel();
                q.Key = "SK104-savoniatest";


                Repository r = new Repository();


                var sensors = r.GetSensorsAsync(q.Key);
                await AddProviderDataList(1, "MeasurementSensors", await sensors);
            }
            catch (Exception)
            {
            }
        }
コード例 #15
0
ファイル: ExportController.cs プロジェクト: SavoniaUAS/SaMi
        public async Task <ActionResult> Login(MeasurementQueryModel query)
        {
            if (!ModelState.IsValid)
            {
                return(View("Login", query));
            }

            Repository r = new Repository();

            try
            {
                var queries = r.GetQueries(query.Key);
                List <SavedQueryModel> savedQueries = new List <SavedQueryModel>();
                if (null != queries)
                {
                    foreach (var q in queries)
                    {
                        savedQueries.Add(new SavedQueryModel(q));
                    }
                }
                ViewBag.Queries = savedQueries;
                var objects = await r.GetDistinctObjectsAsync(query.Key);

                ViewBag.Objects = objects;
                var sensorsTask = r.GetSensorsAsync(query.Key);
                ObservableCollection <SensorModel> sensors = new ObservableCollection <SensorModel>(await sensorsTask);
                ViewBag.Sensors = sensors;
                Helpers.LoginHelper lh = new Helpers.LoginHelper();
                lh.CreateLoginCredentials(this.HttpContext, query.Key);
            }
            catch (KeyNotFoundException kex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(kex, System.Web.HttpContext.Current.Request);
                ModelState.AddModelError("Key", kex.Message);
                return(View());
            }
            catch (UnauthorizedAccessException uex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(uex, System.Web.HttpContext.Current.Request);
                ModelState.AddModelError("Key", uex.Message);
                return(View());
            }
            return(View("Get"));
        }
コード例 #16
0
        public async Task <List <MeasurementModel> > GetMeasurementsAsync(MeasurementQueryModel query)
        {
            Repository r = new Repository();

            try
            {
                var data = await r.GetMeasurementsAsync(query, true);

                return(data);
            }
            catch (KeyNotFoundException kex)
            {
                throw new FaultException(kex.Message);
            }
            catch (UnauthorizedAccessException uex)
            {
                throw new FaultException(uex.Message);
            }
        }
コード例 #17
0
        public async Task <ActionResult> ConfirmDelete(long id)
        {
            Repository            r          = new Repository();
            MeasurementQueryModel queryModel = Session[querySessionKey] as MeasurementQueryModel;

            try
            {
                await r.DeleteMeasurementAsync(null != queryModel?queryModel.Key : null, id);

                return(RedirectToAction("Measurements"));
            }
            catch (KeyNotFoundException kex)
            {
                return(HttpNotFound(kex.Message));
            }
            catch (UnauthorizedAccessException uex)
            {
                return(new HttpUnauthorizedResult(uex.Message));
            }
        }
コード例 #18
0
        public async Task <ActionResult> Delete(long id)
        {
            Repository            r          = new Repository();
            MeasurementQueryModel queryModel = Session[querySessionKey] as MeasurementQueryModel;

            try
            {
                var model = await r.GetMeasurementAsync(null != queryModel?queryModel.Key : null, id, null);

                return(View(model));
            }
            catch (KeyNotFoundException kex)
            {
                return(HttpNotFound(kex.Message));
            }
            catch (UnauthorizedAccessException uex)
            {
                return(new HttpUnauthorizedResult(uex.Message));
            }
        }
コード例 #19
0
ファイル: ExportController.cs プロジェクト: SavoniaUAS/SaMi
        public ActionResult Login()
        {
            MeasurementQueryModel model = Session[querySessionKey] as MeasurementQueryModel;
            ModelStateDictionary  d     = Session["modelstate"] as ModelStateDictionary;

            if (d != null)
            {
                foreach (var k in d)
                {
                    if (k.Value.Errors.Count > 0)
                    {
                        ModelState.AddModelError(k.Key, k.Value.Errors[0]?.ErrorMessage);
                    }
                }
            }
            if (null == model)
            {
                model = new MeasurementQueryModel();
            }
            return(View(model));
        }
コード例 #20
0
        public async Task WCFReadMeasurementsTop100Async()
        {
            int expected            = 100;
            MeasurementQueryModel q = new MeasurementQueryModel()
            {
                Key  = TestHelper.TestKey,
                Take = expected
            };

            MeasurementsServiceClient client = new MeasurementsServiceClient();

            Stopwatch sw     = Stopwatch.StartNew();
            var       result = await client.GetMeasurementsAsync(q);

            sw.Stop();
            client.Close();

            Trace.WriteLine(string.Format("GetMeasurements (async) with query {0} took {1} ms and returned {2} results.", GetQueryString(q), sw.ElapsedMilliseconds, result.Length));
            Assert.IsNotNull(result);
            Assert.AreEqual(expected, result.Length);
        }
コード例 #21
0
ファイル: PerformanceTests.cs プロジェクト: SavoniaUAS/SaMi
        public async Task ReadMeasurementsWithDataTake200Async()
        {
            using (Repository r = new Repository())
            {
                var query = new MeasurementQueryModel()
                {
                    Key  = readKey,
                    From = new DateTimeOffset(2015, 10, 25, 0, 0, 0, TimeSpan.FromHours(3)),
                    To   = new DateTimeOffset(2015, 10, 26, 0, 0, 0, TimeSpan.FromHours(2)),
                    Take = 200
                };
                Stopwatch sw     = Stopwatch.StartNew();
                var       result = await r.GetMeasurementsAsync(query, true);

                sw.Stop();

                int expected = 200;

                Trace.WriteLine(string.Format("Got {0} results with data in {1}.", result.Count, sw.Elapsed));
                var f     = result.First();
                var tenth = result[9];
                var l     = result.Last();
                var fV    = f.Data.Single(d => d.Tag == "CU2_F1_PILOT");
                var tV    = tenth.Data.Single(d => d.Tag == "CU2_T2_PILOT");
                var lV    = l.Data.Single(d => d.Tag == "L2_T2_PILOT");
                Trace.WriteLine(string.Format("First ({0}) {1}, 10th ({2}) {3} and last ({4}) {5}.", f.ID, f.Timestamp, tenth.ID, tenth.Timestamp, l.ID, l.Timestamp));
                Trace.WriteLine(string.Format("1st: {0} = {1}, 10th: {2} = {3}, last: {4} = {5}", fV.Tag, fV.Value, tV.Tag, tV.Value, lV.Tag, lV.Value));
                Assert.IsNotNull(result);
                Assert.AreEqual <int>(expected, result.Count);
                Assert.AreEqual <string>("25.10.2015 23:59:59 +02:00", f.Timestamp.ToString());
                Assert.AreEqual <string>("25.10.2015 23:56:40 +02:00", l.Timestamp.ToString());
                Assert.AreEqual <string>("25.10.2015 23:59:50 +02:00", tenth.Timestamp.ToString());
                Assert.AreEqual <double>(4.118750095367, fV.Value.Value);
                Assert.AreEqual <double>(17.1015625, tV.Value.Value);
                Assert.AreEqual <double>(16.29296875, lV.Value.Value);
                Assert.IsNull(fV.XmlValue);
                Assert.IsNull(tV.BinaryValue);
                Assert.IsNull(lV.TextValue);
            }
        }
コード例 #22
0
ファイル: ExportController.cs プロジェクト: SavoniaUAS/SaMi
        public async Task <ActionResult> DeleteQuery([System.Web.Http.FromBody] MeasurementQueryModel query)
        {
            Helpers.LoginHelper lh = new Helpers.LoginHelper();
            query.Key = lh.GetAuthenticationKey(this.HttpContext);
            if (query.Key != null)
            {
                ModelState.Remove("key");
                ModelState.Add("Key", new ModelState());
                ModelState.SetModelValue("Key", new ValueProviderResult(query.Key, query.Key, System.Globalization.CultureInfo.CurrentCulture));
            }
            string c = " <div class='alert alert-danger fade in'><a class='close' data-dismiss='alert' aria-label='close'>&times;</a><span class='text-info'><span class='text-success'>Query: " + query.Name + " was <strong>NOT</strong> deleted successfully!</span></span></div>";

            if (!ModelState.IsValid)
            {
                return(Content(c));
            }
            Repository      r          = new Repository();
            int             result     = 0;
            SavedQueryModel savedQuery = new SavedQueryModel();

            try
            {
                result = await r.DeleteQueryAsync(query);

                if (result > 0)
                {
                    savedQuery = new SavedQueryModel(query);
                }
                else
                {
                    return(Content(c));
                }
            }
            catch (Exception ex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ex, System.Web.HttpContext.Current.Request);
                return(Content(c));
            }
            return(Json(savedQuery));
        }
コード例 #23
0
ファイル: PerformanceTests.cs プロジェクト: SavoniaUAS/SaMi
        public async Task ReadMeasurementsWithBinaryDataAsync()
        {
            using (Repository r = new Repository())
            {
                var query = new MeasurementQueryModel()
                {
                    Key = "Your-Key-here"
                };
                Stopwatch sw     = Stopwatch.StartNew();
                var       result = await r.GetMeasurementsAsync(query, true);

                sw.Stop();

                int expected = 20;

                Trace.WriteLine(string.Format("Got {0} results with data in {1}.", result.Count, sw.Elapsed));
                var f      = result.First();
                var wanted = result.Single(d => d.ID == 18);
                var im     = wanted.Data.Single(d => d.Tag == "Image");
                var l      = result.Last();
                Trace.WriteLine(string.Format("First ({0}) {1}, 10th ({2}) {3} and last ({4}) {5}.", f.ID, f.Timestamp, wanted.ID, wanted.Timestamp, l.ID, l.Timestamp));
                wanted.Data.ForEach(d =>
                {
                    Trace.WriteLine(string.Format("{0}: Value = {1}, Text = {2}, Has binary = {3}", d.Tag, d.Value, d.TextValue, null != d.BinaryValue));
                });
                Assert.IsNotNull(result);
                Assert.AreEqual <int>(expected, result.Count);
                //Assert.AreEqual<string>("25.10.2015 23:59:59 +02:00", f.Timestamp.ToString());
                //Assert.AreEqual<string>("25.10.2015 0:00:01 +03:00", l.Timestamp.ToString());
                //Assert.AreEqual<string>("25.10.2015 23:59:50 +02:00", tenth.Timestamp.ToString());
                Assert.AreEqual <string>("image/jpeg", im.TextValue);
                Assert.IsNotNull(im.BinaryValue);
                //if (null != im.BinaryValue)
                //{
                //    System.IO.File.WriteAllBytes(@"c:\temp\img.jpg", im.BinaryValue);
                //}
            }
        }
コード例 #24
0
ファイル: SavedQueryModel.cs プロジェクト: SavoniaUAS/SaMi
        public SavedQueryModel(MeasurementQueryModel model)
        {
            this.Name = model.Name;
            this.Obj  = model.Obj;
            this.Tag  = model.Tag;
            this.Take = model.Take;
            if (model.From.HasValue)
            {
                var f    = model.From.Value.ToString("u");
                var a    = f.Split('Z');
                var from = a[0];
                this.From = from;
            }

            if (model.To.HasValue)
            {
                var f  = model.To.Value.ToString("u");
                var a  = f.Split('Z');
                var to = a[0];
                this.To = to;
            }
            this.Sensors = model.Sensors;
        }
コード例 #25
0
 private string GetQueryString(MeasurementQueryModel q)
 {
     return(string.Format("\"From {0}, To {1}, Take {2}, Obj {3}, Tag {4}\"", q.From, q.To, q.Take, q.Obj, q.Tag));
 }
コード例 #26
0
ファイル: ExportController.cs プロジェクト: SavoniaUAS/SaMi
        public async Task <ActionResult> Measurements(MeasurementQueryModel query, CancellationToken t)
        {
            CancellationToken disconnectedToken = Response.ClientDisconnectedToken;
            var timeOutToken = Request.TimedOutToken;
            var source       = CancellationTokenSource.CreateLinkedTokenSource(t, disconnectedToken, timeOutToken);

            Helpers.LoginHelper lh = new Helpers.LoginHelper();
            query.Key = lh.GetAuthenticationKey(this.HttpContext);
            if (query.Key != null)
            {
                ModelState.Remove("key");
                ModelState.Add("Key", new ModelState());
                ModelState.SetModelValue("Key", new ValueProviderResult(query.Key, query.Key, System.Globalization.CultureInfo.CurrentCulture));
            }

            if (!ModelState.IsValid)
            {
                return(RedirectToAction("RedirectToLogin"));
            }
            Repository r = new Repository();

            try
            {
                var measurements = await r.GetMeasurementsAsync(query, source.Token, true);

                if (measurements?.Count > 0 && !source.IsCancellationRequested)
                {
                    ViewBag.DataCount = measurements[0].Data.Count;
                    Helpers.DocumentHelper s = new Helpers.DocumentHelper();
                    string filename          = Session.SessionID + ".json";
                    string directoryPath     = Server.MapPath(Common.GlobalSettings.GetJSONPath);
                    s.SerializeJSONFile <List <MeasurementModel> >(measurements, directoryPath, filename);
                    ViewBag.DatetimeFormats  = Helpers.DatetimeFormatHelper.GetPossibleDatetimeFormats();
                    ViewBag.ExportModel      = new Models.ExportModel();
                    ViewBag.MeasurementCount = measurements.Count;
                }
                else
                {
                    source.Dispose();
                    return(Content("<span class='text-danger'>0 measurements found with given parameters.</span>"));
                }
                if (measurements.Count > 3000)
                {
                    var m = measurements.Take(3000);
                    measurements = m.ToList();
                }

                return(PartialView("~/Views/Export/Export.cshtml", measurements));
            }
            catch (KeyNotFoundException kex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(kex, System.Web.HttpContext.Current.Request);
                return(RedirectToAction("RedirectToLogin"));
            }
            catch (UnauthorizedAccessException uex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(uex, System.Web.HttpContext.Current.Request);
                return(RedirectToAction("RedirectToLogin"));
            }
            catch (OperationCanceledException canceled)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(canceled, System.Web.HttpContext.Current.Request);
                source.Dispose();
                return(Content("<span class='text-danger'>Request cancelled.</span>"));
            }
            catch (Exception ex)
            {
                Savonia.Web.ErrorReporter.ErrorReporterModule.HandleException(ex, System.Web.HttpContext.Current.Request);
                return(RedirectToAction("RedirectToLogin"));
            }
        }