public async Task <IActionResult> Put(string key, SrnDto value)
        {
            if (!await _security.Match(key, User))
            {
                return(Forbid());
            }

            try
            {
                if (value.Data == null)
                {
                    throw new SrnException("SRN data must not be null. Use the Delete method to remove a value.");
                }

                var srn = (Srn)key;
                if (!srn.HasNamespace() || !srn.HasKey())
                {
                    throw new SrnException("Updating SRN data in bulk is not currently supported.");
                }

                await _service.SetAsync(srn, value.Data, value.Provider);

                return(Ok());
            }
            catch (SrnException e)
            {
                return(BadRequest(new { e.Message }));
            }
        }
        public async Task <IActionResult> Get(string key, SrnDto value)
        {
            if (!await _security.Match(key, User))
            {
                return(Forbid());
            }

            try
            {
                var srn = (Srn)key;

                if (string.IsNullOrWhiteSpace(srn.Namespace))
                {
                    throw new SrnException("Bulk retrieving namespaces is not currently supported.");
                }

                return(Json(value.Providers != null
                    ? await _service.GetAsync(srn, value.Providers)
                    : await _service.GetAsync(srn, value.Provider)));
            }
            catch (SrnException e)
            {
                return(BadRequest(new { e.Message }));
            }
        }
        public async Task <IActionResult> Delete(string key, SrnDto value)
        {
            if (!await _security.Match(key, User))
            {
                return(Forbid());
            }

            try
            {
                var srn = (Srn)key;
                if (string.IsNullOrWhiteSpace(srn.Namespace))
                {
                    throw new SrnException("No namespace or key was provided to delete.");
                }

                await _service.DeleteAsync(srn, value.Provider);

                return(Ok());
            }
            catch (SrnException e)
            {
                return(BadRequest(new { e.Message }));
            }
        }