public async Task <ActionResult> Challenge(SupportServiceResourceKey resourceKey, SupportServiceResourceKey challengeKey, string resourceId, string url)
        {
            if (!_serviceConfiguration.ChallengeExists(challengeKey))
            {
                return(HttpNotFound());
            }

            ViewBag.SubNav = await _repository.GetNav(resourceKey, resourceId);

            ViewBag.SubHeader = await _repository.GenerateHeader(resourceKey, resourceId);

            try
            {
                var challengeForm = await _repository.GetChallengeForm(resourceKey, challengeKey, resourceId, url);

                return(View("Sub", new ResourceResultModel
                {
                    StatusCode = HttpStatusCode.OK,
                    Resource = challengeForm
                }));
            }
            catch
            {
                return(View("Missing"));
            }
        }
        public async Task <ChallengeResult> SubmitChallenge(string id, IDictionary <string, string> formData)
        {
            var redirect    = formData["redirect"];
            var innerAction = formData["innerAction"];

            var challengeKey =
                (SupportServiceResourceKey)Enum.Parse(typeof(SupportServiceResourceKey), formData["challengeKey"]);
            var resourceKey =
                (SupportServiceResourceKey)Enum.Parse(typeof(SupportServiceResourceKey), formData["resourceKey"]);

            if (!_serviceConfiguration.ChallengeExists(challengeKey))
            {
                throw new MissingMemberException();
            }

            var siteUri = _serviceConfiguration.FindSiteBaseUriForManfiestElement(_sites, challengeKey);
            var uri     = new Uri(siteUri, innerAction);

            formData.Remove("redirect");
            formData.Remove("innerAction");
            formData.Remove("resourceKey");

            var html = await _siteConnector.Upload <string>(uri, formData);

            if (_siteConnector.LastException != null)
            {
                throw _siteConnector.LastException;
            }

            return(HandleChallenegeResponseContent(html, resourceKey, challengeKey, id, redirect));
        }