Example #1
3
        public void Should_get_a_messagge()
        {
            var contentType = "text/text";
            var payload = "Hello!";
            var message = new Message()
            {
                Id = Identity.Random(),
                TopicId = Identity.Random(),
                Payload = Encoding.ASCII.GetBytes(payload),
                UtcReceivedOn = DateTime.UtcNow
            };

            message.Headers.Add("Content-Type", new[] { contentType });

            var key = new MessageKey { MessageId = message.Id.Value, TopicId = message.TopicId };

            messageByMessageKey
                .Setup(r => r.Get(It.Is<MessageKey>(k => k.TopicId == key.TopicId && k.MessageId == key.MessageId)))
                .Returns(message);

            var client = new HttpClient(baseUri);
            var url = baseUri + message.Id.Value.ToString() + "/topic/" + message.TopicId;
            var result = client.Get(url);

            messageByMessageKey.Verify(r => r.Get(It.Is<MessageKey>(k => k.TopicId == key.TopicId && k.MessageId == key.MessageId)));

            Assert.IsNotNull(result);
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            Assert.AreEqual(payload, result.Content.ReadAsString());
            Assert.AreEqual(contentType, result.Content.Headers.ContentType.MediaType);
        }
        static void Main(string[] args)
        {
            CookieContainer cookieContainer = new CookieContainer();
            using (HttpClient client = new HttpClient("http://localhost:44857/")) {
                HttpClientChannel clientChannel = new HttpClientChannel();
                clientChannel.CookieContainer = cookieContainer;
                client.Channel = clientChannel;
                HttpContent loginData = new FormUrlEncodedContent(
                    new List<KeyValuePair<string, string>>
                        {
                            new KeyValuePair<string, string>("Username", "foo"),
                            new KeyValuePair<string, string>("Password", "bar")
                        }
                    );
                client.Post("login", loginData);
            }

            string result = string.Empty;
            using (HttpClient client = new HttpClient("http://localhost:44857/contact/")) {
                HttpClientChannel clientChannel = new HttpClientChannel();
                clientChannel.CookieContainer = cookieContainer;
                client.Channel = clientChannel;
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage response = client.Get("1");
                result = response.Content.ReadAsString();
            }

            JavaScriptSerializer jsonDeserializer = new JavaScriptSerializer();
            ContactDto contact = jsonDeserializer.Deserialize<ContactDto>(result);
            Console.WriteLine(contact.Name);
            Console.ReadLine();
        }
Example #3
0
        public override bool ValidateAccessToken(string token)
        {
            string _auth = string.Format("{0}:{1}", CLIENT_ID, CLIENT_SECRET);
            string _enc  = Convert.ToBase64String(Encoding.UTF8.GetBytes(_auth));


            System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
            client.DefaultRequestHeaders.Add("user-agent", "SF-Client");
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", _enc);

            var response = client.Get(ValidateUrl + token);

            if (response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                return(false);
            }

            client = new System.Net.Http.HttpClient();
            client.DefaultRequestHeaders.Add("user-agent", "SF-Client");

            response = client.Get("https://api.github.com/user?access_token=" + token);
            dynamic user = response.Content.ReadAs <JsonObject>();

            SetMemberInfo(user);
            return(true);
        }
        public virtual bool ValidateAccessToken(string token)
        {
            if (!IsProviderEnabled())
                throw new ScrumFactory.Exceptions.AuthorizationProviderNotSupportedException();

            System.Net.Http.HttpClientHandler handler = new System.Net.Http.HttpClientHandler();
            handler.Proxy = System.Net.WebRequest.DefaultWebProxy;
            System.Net.Http.HttpClient wc = new System.Net.Http.HttpClient(handler);

            System.Net.Http.HttpResponseMessage msg = null;
            try {
                msg = wc.Get(new Uri(ValidateUrl + "?access_token=" + token));
            }
            catch (Exception ex) {
                throw new System.ServiceModel.Web.WebFaultException<string>(ex.Message, System.Net.HttpStatusCode.BadRequest);
            }

            if (msg.StatusCode == HttpStatusCode.Unauthorized)
                return false;

            if (msg.StatusCode != HttpStatusCode.OK)
                throw new System.ServiceModel.Web.WebFaultException<string>("Server failed to validate token: " + msg.StatusCode.ToString(), System.Net.HttpStatusCode.BadRequest);

            dynamic info = msg.Content.ReadAs<JsonObject>();
            SetMemberInfo(info);
            return true;
        }
        public IApplicationState NextState(HttpClient client)
        {
            if (currentResponse.Content.Headers.ContentType.Equals(AtomMediaType.Feed))
            {
                var feed = currentResponse.Content.ReadAsObject<SyndicationFeed>(AtomMediaType.Formatter);
                if (feed.Categories.Contains(new SyndicationCategory("encounter"), CategoryComparer.Instance))
                {
                    return new ResolvingEncounter(currentResponse, applicationStateInfo);
                }
                return new Error(currentResponse, applicationStateInfo);
            }

            var entry = currentResponse.Content.ReadAsObject<SyndicationItem>(AtomMediaType.Formatter);

            if (entry.Title.Text.Equals("Exit"))
            {
                return new GoalAchieved(currentResponse);
            }

            var exitLink = GetExitLink(entry, applicationStateInfo.History, "north", "east", "west", "south");

            var newResponse = client.Get(new Uri(entry.BaseUri, exitLink.Uri));
            var exitUri = applicationStateInfo.History.Contains(exitLink.Uri) ? null : exitLink.Uri;

            return new Exploring(newResponse, applicationStateInfo.GetBuilder().AddToHistory(exitUri).Build());
        }
Example #6
0
	public void WhenOrdering_ThenSucceeds()
	{
		var config = HttpHostConfiguration.Create();
		config.Configuration.OperationHandlerFactory.Formatters.Insert(0, new JsonNetMediaTypeFormatter());

		using (var ws = new HttpWebService<TestService>("http://localhost:20000", "products", config))
		{
			var client = new HttpClient("http://localhost:20000");
			client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/json"));

			var context = new DataServiceContext(new Uri("http://localhost:20000"));
			// We always specify how many to take, to be explicit.
			var query = context.CreateQuery<Product>("products")
				.Where(x => x.Owner.Name == "kzu")
				.OrderBy(x => x.Id)
				.ThenBy(x => x.Owner.Id)
				.Skip(1)
				.Take(1);

			//var uri = ((DataServiceQuery)query).RequestUri;
			var uri = new Uri(((DataServiceQuery)query).RequestUri.ToString().Replace("()?$", "?$"));
			Console.WriteLine(uri);
			var response = client.Get(uri);

			Assert.True(response.IsSuccessStatusCode, "Failed : " + response.StatusCode + " " + response.ReasonPhrase);

			var products = new JsonSerializer().Deserialize<List<Product>>(new JsonTextReader(new StreamReader(response.Content.ContentReadStream)));

			Assert.Equal(1, products.Count);
		}
	}
Example #7
0
        //
        // GET: /Home/
        public ActionResult Index()
        {
            HttpClient client = new HttpClient();// {BaseAddress = uri};
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var response = client.Get(uri);

            var donaldEpisodes = response.Content.ReadAs<List<DonaldEpisode>>();
            return View(donaldEpisodes);
        }
 public IList<INosSession> GetUnplannedSessions()
 {
     using (HttpClient httpClient = new HttpClient(_baseAddress)) {
         httpClient.DefaultRequestHeaders.Accept.Add(_json);
         HttpResponseMessage response = httpClient.Get("sessions/unplanned");
         List<NosSession> sessions = response.Content.ReadAs<List<NosSession>>(new List<MediaTypeFormatter>() { new JsonMediaTypeFormatter() });
         return new List<INosSession>(sessions);
     }
 }
Example #9
0
        public async Task<List<GetClaimsResponseItem>> GetClaims(string accessToken)
        {
            var client = new HttpClient()
            {
                BaseAddress = new Uri(_baseUri)
            };

            client.DefaultRequestHeaders.Authorization = JwtAuthHeader.GetHeader(accessToken);

            var response = await client.Get<List<GetClaimsResponseItem>>("values/claims");

            return response.Data;
        }
Example #10
0
        public void Validates_a_get_of_a_message_that_does_not_exist()
        {
            messageByMessageKey.Setup(s => s.Get(It.IsAny<MessageKey>())).Returns((Message)null);

            var client = new HttpClient(baseUri);
            var url = baseUri.ToString() + Identity.Random() + "/topic/" + Identity.Random();
            var result = client.Get(url);

            messageByMessageKey.Verify(r => r.Get(It.IsAny<MessageKey>()));

            Assert.IsNotNull(result);
            Assert.AreEqual(HttpStatusCode.NotFound, result.StatusCode);
        }
Example #11
0
        private static void basicAuthenticationSample()
        {
            var client = new HttpClient(Urls.Code)
            {
                Channel = new BasicAuthenticationChannel(new WebRequestChannel(),
                                                         _ => Tuple.Create("test", "changeit"),
                                                         new WebRequestChannel())
            };

            var response = client.Get("preprompt/wcf/banzai.txt");
            response.EnsureSuccessStatusCode();
            Console.WriteLine(response);
            Console.WriteLine(response.Content.ReadAsString());
        }
 public void WhenGettingThenReturnsListOfPeopleAdded()
 {
     var peopleToSayHelloTo = new List<string>();
     peopleToSayHelloTo.Add("Glenn");
     HelloResource.Initialize(peopleToSayHelloTo);
     using (var host = new HttpServiceHost(typeof(HelloResource), this.hostUri))
     {
         host.Open();
         var client = new HttpClient();
         var response = client.Get(this.hostUri);
         Assert.AreEqual("Hello Glenn", response.Content.ReadAsString());
         host.Close();
     }
 }
        public ICollection<string> LoadCodeReps(Project project)
        {
            System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
            client = new System.Net.Http.HttpClient();
            client.DefaultRequestHeaders.Add("user-agent", "SF-Client");

            var response = client.Get("https://api.github.com/user/repos?access_token=" + authorizator.SignedMemberToken);
            if(response.StatusCode!=System.Net.HttpStatusCode.OK)
                return new string[0];
            dynamic reposArray = response.Content.ReadAs<JsonArray>();
            List<string> repos = new List<string>();
            foreach (var repo in reposArray)
                repos.Add((string)repo.svn_url);
            return repos.ToArray();
        }
Example #14
0
        public void Should_get_a_messagge_by_topic()
        {
            var key = new MessageKey {MessageId = Identity.Random(), TopicId = Identity.Random()};

            messageKeysByTopic
                .Setup(r => r.Get(key.TopicId, null, null, null))
                .Returns(new[] {key});

            var client = new HttpClient(baseUri);
            var url = baseUri + "topic/" + key.TopicId;
            var result = client.Get(url);

            Assert.IsNotNull(result);
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
        }
Example #15
0
	public void WhenHostingDisposableService_ThenDefaultActivatorFactoryDisposesIt()
	{
		using (var webservice = new HttpWebService<TestService>(
			serviceBaseUrl: "http://localhost:20000",
			serviceResourcePath: "test",
			serviceConfiguration: HttpHostConfiguration.Create()))
		{
			var client = new HttpClient(webservice.BaseUri);

			// Builds: http://localhost:2000/test/23
			var uri = webservice.Uri("23");
			var response = client.Get(uri);
		}

		Assert.True(TestService.IsDisposed);
	}
Example #16
0
	public void WhenHostingSpecificServiceInstance_ThenGetsConfiguredResult()
	{
		var id = Guid.NewGuid();
		using (var webservice = HttpWebService.Create(new TestService(id),
			serviceBaseUrl: "http://localhost:20000",
			serviceResourcePath: "test"))
		{
			var client = new HttpClient(webservice.BaseUri);

			// Builds: http://localhost:2000/test
			var uri = webservice.Uri("");
			var response = client.Get(uri);

			Assert.True(response.IsSuccessStatusCode, response.ToString());
			Assert.True(response.Content.ReadAsString().Contains(id.ToString()));
		}
	}
Example #17
0
	public void WhenHostingService_ThenCanInvokeIt()
	{
		using (var webservice = new HttpWebService<TestService>(
			serviceBaseUrl: "http://localhost:20000",
			serviceResourcePath: "test",
			serviceConfiguration: HttpHostConfiguration.Create()))
		{
			var client = new HttpClient(webservice.BaseUri);

			// Builds: http://localhost:2000/test/23
			var uri = webservice.Uri("23");
			var response = client.Get(uri);

			Assert.True(response.IsSuccessStatusCode, response.ToString());
			Assert.True(response.Content.ReadAsString().Contains("23"));
		}
	}
Example #18
0
        public void ServiceHost_Works_With_OneWay_Operation()
        {
            ContractDescription cd = ContractDescription.GetContract(typeof(OneWayService));
            HttpServiceHost host = new HttpServiceHost(typeof(OneWayService), new Uri("http://localhost/onewayservice"));
            host.Open();

            using (HttpClient client = new HttpClient())
            {
                client.Channel = new WebRequestChannel();
                using (HttpResponseMessage actualResponse = client.Get("http://localhost/onewayservice/name"))
                {
                    Assert.AreEqual(actualResponse.StatusCode, HttpStatusCode.Accepted, "Response status code should be Accepted(202) for one-way operation");
                }
            }

            host.Close();
        }
	private static void TestWithContentType(string contentType, Func<HttpContent, JsonReader> readerFactory)
	{
		var config = HttpHostConfiguration.Create().UseJsonNet();

		using (var webservice = new HttpWebService<TestService>("http://localhost:20000", "test", config))
		{
			var client = new HttpClient(webservice.BaseUri);
			client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(contentType));

			var response = client.Get(webservice.Uri(25));

			Assert.True(response.IsSuccessStatusCode, response.ToString());

			var product = new JsonSerializer().Deserialize<Product>(readerFactory(response.Content));

			Assert.Equal(25, product.Id);
			Assert.Equal("kzu", product.Owner.Name);
		}
	}
Example #20
0
	public void WhenHostingCachedServiceInstance_ThenGetsSameResultAlways()
	{
		using (var webservice = new HttpWebService<TestService>(
			cacheServiceInstance: true,
			serviceBaseUrl: "http://localhost:20000",
			serviceResourcePath: "test",
			serviceConfiguration: HttpHostConfiguration.Create()))
		{
			var client = new HttpClient(webservice.BaseUri);

			// Builds: http://localhost:2000/test/23
			var uri = webservice.Uri("23");
			var response = client.Get(uri);

			Assert.True(response.IsSuccessStatusCode, response.ToString());

			var content1 = response.Content.ReadAsString();
			var content2 = client.Get(uri).Content.ReadAsString();
			Assert.Equal(content1, content2);
		}
	}
        public override bool ValidateAccessToken(string token)
        {
            if (!IsProviderEnabled())
            {
                throw new ScrumFactory.Exceptions.AuthorizationProviderNotSupportedException();
            }


            System.Net.Http.HttpClientHandler handler = new System.Net.Http.HttpClientHandler();
            handler.Proxy = System.Net.WebRequest.DefaultWebProxy;
            System.Net.Http.HttpClient wc = new System.Net.Http.HttpClient(handler);

            wc.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

            System.Net.Http.HttpResponseMessage msg = null;
            try
            {
                msg = wc.Get(new Uri(ValidateUrl));
            }
            catch (Exception ex)
            {
                throw new System.ServiceModel.Web.WebFaultException <string>(ex.Message, System.Net.HttpStatusCode.BadRequest);
            }

            if (msg.StatusCode == HttpStatusCode.Unauthorized)
            {
                var err = msg.Content.ReadAsString();
                return(false);
            }

            if (msg.StatusCode != HttpStatusCode.OK)
            {
                throw new System.ServiceModel.Web.WebFaultException <string>("Server failed to validate token: " + msg.StatusCode.ToString(), System.Net.HttpStatusCode.BadRequest);
            }

            dynamic info = msg.Content.ReadAs <JsonObject>();

            SetMemberInfo(info);
            return(true);
        }
Example #22
0
 /// <summary>
 /// Get land by earthwatcher
 /// </summary>
 /// <param name="tigUser"></param>
 private static void GetLandByEarthwatcher(string tigUser)
 {
     // send a http get request
     var httpClient = new HttpClient();
     var response=httpClient.Get(Server+ "land/earthwatcher=" + tigUser).Content.ReadAsString();
     
     // parse xml
     var xdoc = XDocument.Load(new StringReader(response));
     var land=(from d in xdoc.Elements("Land") select d).FirstOrDefault();
     if (land != null)
     {
         // print the result
         if (land.Element("Id") != null)
         {
             Console.Write("User " + tigUser + " has land id: " + land.Element("Id").Value);
         }
         else
         {
             Console.Write("User " + tigUser + " has no land yet");
         }
     }
 }
        public override bool ValidateAccessToken(string token)
        {
            string _auth = string.Format("{0}:{1}", CLIENT_ID, CLIENT_SECRET);
            string _enc = Convert.ToBase64String(Encoding.UTF8.GetBytes(_auth));

            System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
            client.DefaultRequestHeaders.Add("user-agent", "SF-Client");
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", _enc);

            var response = client.Get(ValidateUrl + token);

            if (response.StatusCode != System.Net.HttpStatusCode.OK) {
                return false;
            }

            client = new System.Net.Http.HttpClient();
            client.DefaultRequestHeaders.Add("user-agent", "SF-Client");

            response = client.Get("https://api.github.com/user?access_token=" + token);
            dynamic user = response.Content.ReadAs<JsonObject>();

            SetMemberInfo(user);
            return true;
        }
Example #24
0
        public void TrailingSlashMode_Redirects_By_Default()
        {
            HttpBehavior httpBehavior = new HttpBehavior();

            string actualBaseAddress = null;
            ServiceHost actualHost = GetServiceHost(typeof(TrailingSlashModeService), httpBehavior, new HttpBinding(), out actualBaseAddress);

            using (HttpClient client = new HttpClient())
            {
                client.Channel = new WebRequestChannel();
                using (HttpResponseMessage actualResponse = client.Get(actualBaseAddress + "/"))
                {
                    Assert.AreEqual(actualResponse.RequestMessage.RequestUri.ToString(), actualBaseAddress, "The server should have redirected to the address without the trailing slash.");
                }
            }

            actualHost.Close();
        }
Example #25
0
        protected void GetId6_Click(object sender, EventArgs e)
        {
            int input = 0;
            try
            {
                input = Convert.ToInt32(this.TextBox5.Text, CultureInfo.InvariantCulture);
            }
            catch (Exception)
            {
                this.TextBox5.Text = "Error: please enter an integer";
                return;
            }
            string uri = string.Format("http://localhost:8300/contacts?$filter=Id eq {0}", TextBox5.Text);
            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
            var response = client.Get(uri);

            var resultList = response.Content.ReadAs<List<Contact>>();

            string result = string.Empty;

            if (resultList.Count == 0)
            {
                result = "There is no contact with ID = " + input;
            }
            else
            {
                result = "Found a matched contact: ";
                result += string.Format(CultureInfo.InvariantCulture, "\r\n Contact Name: {0}, Contact Id: {1}", resultList[0].Name, resultList[0].Id);
            }

            this.TextBox4.Text = uri;

            this.Result.Text = result;
        }
        public bool LoadSettings(out string errorMessage)
        {
            errorMessage = null;
            var client = new System.Net.Http.HttpClient();
            client.DefaultRequestHeaders.Add("user-agent", "SF-Client");

            var response = client.Get("https://api.github.com/user?access_token=" + authorizator.SignedMemberToken);
            if (response.StatusCode != System.Net.HttpStatusCode.OK) {
                errorMessage = "You must be signed in with a GitHub account.";
                return false;
            }
            dynamic user = response.Content.ReadAs<JsonObject>();
            RepositoryRoot = (string) user.html_url;
            return true;
        }
Example #27
0
        private Guid GetUserIdForApiKey(string apiKey)
        {
            if (string.IsNullOrWhiteSpace(apiKey)) { throw new ArgumentNullException("apiKey"); }

            string baseUrl = Settings.Default.LocanServiceBaseUrl;
            string url = string.Format(
                "{0}/{1}/{2}",
                baseUrl,
                Consts.UrlRegiserUser,
                apiKey);

            var textHeader = new MediaTypeWithQualityHeaderValue(Consts.HeaderText);
            using (HttpClient client = new HttpClient()) {
                client.DefaultRequestHeaders.Accept.Add(textHeader);
                HttpResponseMessage response = client.Get(url);
                response.EnsureSuccessStatusCode();
                string guidString = response.Content.ReadAsString();
                // Result looks like: <?xml version="1.0" encoding="utf-8"?><guid>2158e8e5-ae6c-4b9a-a7ab-3169fff9750d</guid>
                XDocument doc = XDocument.Parse(guidString);
                Guid id = new Guid(doc.Root.Value);
                return id;
            }
        }
Example #28
0
        public void Validates_a_get_with_invalid_data()
        {
            messageByMessageKey.Setup(s => s.Get(It.IsAny<MessageKey>())).Throws<ValidationException>();

            var client = new HttpClient(baseUri);
            var url = baseUri.ToString() + Identity.Random() + "/topic/" + Identity.Random();
            var result = client.Get(url);

            messageByMessageKey.Verify(r => r.Get(It.IsAny<MessageKey>()));

            Assert.IsNotNull(result);
            Assert.AreEqual(HttpStatusCode.BadRequest, result.StatusCode);
        }
Example #29
0
        private SyndicationFeed GetFeedForMessage(Message message)
        {
            var messageId = message.Id.Value;
            var topicId = message.TopicId;

            var feedEntry = new FeedEntry() { MessageId = messageId, TimeStamp = DateTime.UtcNow };
            var feed = new Feed()
            {
                Entries = new List<FeedEntry>(new[] { feedEntry }),
                Id = Identity.Random(),
                TopicId = topicId,
                Updated = DateTime.UtcNow
            };

            var topic = new Topic()
            {
                Id = topicId,
                Name = "Topic Name",
                Description = "Topic Description",
                GroupId = Identity.Random()
            };

            var key = new MessageKey { MessageId = messageId, TopicId = topicId };

            messageByMessageKey
                .Setup(r => r.Get(It.Is<MessageKey>(k => k.TopicId == key.TopicId && k.MessageId == key.MessageId)))
                .Returns(message);

            getWorkingFeedForTopic
                .Setup(r => r.Execute(topicId))
                .Returns(feed);

            entityById
                .Setup(r => r.Get<Topic>(topicId))
                .Returns(topic);

            var client = new HttpClient(baseUri);

            var response = client.Get(topicId.ToString());
            var formatter = new Atom10FeedFormatter();

            using (var rdr = XmlReader.Create(response.Content.ContentReadStream))
            {
                formatter.ReadFrom(rdr);
                return formatter.Feed;
            }
        }
        public void TestGet()
        {
            using (var webservice = CreateRESTHttpService())
            {
                var client = new HttpClient();
                client.BaseAddress = webservice.BaseUri;

                // Builds: http://localhost:20259/RESTEmployeeService.svc/Get?id=1
                var uri = webservice.Uri("Get?id=1");
                var response = client.Get(uri);

                Assert.True(response.IsSuccessStatusCode, response.ToString());
                // Console.WriteLine(response.Content.ReadAsString());
                Assert.True(response.Content.ReadAsString().Contains("1"));
            }
        }
 public IApplicationState NextState(HttpClient client)
 {
     return new Exploring(client.Get(entryPointUri), applicationStateInfo.GetBuilder().AddToHistory(entryPointUri).Build());
 }
Example #32
0
 /// <summary>
 /// Get请求
 /// </summary>
 /// <param name="httpClient">http客户端</param>
 /// <param name="url">URL</param>
 /// <param name="customerOptions">自定义选项配置</param>
 /// <returns>任务</returns>
 public static Task <string> GetAsync(this HttpClient httpClient, string url, Action <ChannelCustomerOptions> customerOptions = null)
 {
     return(Task <string> .Run(() => httpClient.Get(url, customerOptions)));
 }
        public IApplicationState NextState(HttpClient client)
        {
            if (applicationStateInfo.Endurance < 1)
            {
                return new Defeated(currentResponse, applicationStateInfo);
            }

            if (currentResponse.Content.Headers.ContentType.Equals(AtomMediaType.Feed))
            {
                var feed = currentResponse.Content.ReadAsObject<SyndicationFeed>(AtomMediaType.Formatter);
                if (feed.Categories.Contains(new SyndicationCategory("encounter"), CategoryComparer.Instance))
                {
                    var form = Form.ParseFromFeedExtension(feed);
                    form.Fields.Named("endurance").Value = applicationStateInfo.Endurance.ToString();

                    var newResponse = client.Send(form.CreateRequest(feed.BaseUri));

                    if (newResponse.Content.Headers.ContentType.Equals(AtomMediaType.Entry))
                    {
                        var newContent = newResponse.Content.ReadAsObject<SyndicationItem>(AtomMediaType.Formatter);
                        var newForm = Form.ParseFromEntryContent(newContent);
                        var newEndurance = int.Parse(newForm.Fields.Named("endurance").Value);

                        return new ResolvingEncounter(newResponse, applicationStateInfo.GetBuilder().UpdateEndurance(newEndurance).Build());
                    }
                }

                return new Error(currentResponse, applicationStateInfo);
            }

            if (currentResponse.Content.Headers.ContentType.Equals(AtomMediaType.Entry))
            {
                var entry = currentResponse.Content.ReadAsObject<SyndicationItem>(AtomMediaType.Formatter);

                if (entry.Categories.Contains(new SyndicationCategory("room"), CategoryComparer.Instance))
                {
                    return new Exploring(currentResponse, applicationStateInfo);
                }

                var continueLink = entry.Links.FirstOrDefault(l => l.RelationshipType.Equals("continue"));
                if (continueLink != null)
                {
                    return new ResolvingEncounter(client.Get(new Uri(entry.BaseUri, continueLink.Uri)), applicationStateInfo);
                }

                var form = Form.ParseFromEntryContent(entry);
                var newResponse = client.Send(form.CreateRequest(entry.BaseUri));

                if (newResponse.Content.Headers.ContentType.Equals(AtomMediaType.Entry))
                {
                    var newContent = newResponse.Content.ReadAsObject<SyndicationItem>(AtomMediaType.Formatter);
                    var newForm = Form.ParseFromEntryContent(newContent);
                    var newEndurance = int.Parse(newForm.Fields.Named("endurance").Value);

                    return new ResolvingEncounter(newResponse, applicationStateInfo.GetBuilder().UpdateEndurance(newEndurance).Build());
                }
            }

            return new Error(currentResponse, applicationStateInfo);
        }