首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对于开发人员,您不知道如何配置吗?

对于开发人员,您不知道如何配置吗?
EN

Stack Overflow用户
提问于 2019-06-07 21:56:50
回答 2查看 650关注 0票数 0

因此,对于我的家庭作业,我需要创建一个不使用SQL的应用程序(像以前一样),而是使用rest api。问题是我从来没有这样做过,我不知道如何配置它。

到目前为止,我得到了这样的结论:

代码语言:javascript
复制
string strUrlTest = String.Format("https://test.api.amadeus.com/v1/shopping/flight-offers");
WebRequest requestObjGet = WebRequest.Create(strUrlTest);

requestObjGet.Method = "GET";
requestObjGet.Headers.Add("API KEY", 
"API SECRET);

HttpWebResponse responseObjGet = null;
responseObjGet = (HttpWebResponse)requestObjGet.GetResponse();

string strResultTest = null;
using(Stream stream = responseObjGet.GetResponseStream())
{
    StreamReader sr = new StreamReader(stream);
    strResultTest = sr.ReadToEnd();
    sr.Close();
}

我只是想看看调试器是否得到了我所有的数据,但是我的程序在

代码语言:javascript
复制
responseObjGet = (HttpWebResponse)requestObjGet.GetResponse();

你能帮我弄清楚吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-10 15:55:44

我用C#编写了一个代码示例,通过创建应用程序将apikeyapisecret替换为您在门户上获得的代码。你可以找到一个指南here

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;

namespace testApp
{
    public class AmadeusTest
    {
        static void Main()
        {
            const string URL = "https://test.api.amadeus.com/v1/shopping/flight-destinations?origin=BOS";
            string token = getToken();
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri(URL);
            client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Bearer " + token);
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, "");

            Task<HttpResponseMessage> response = client.SendAsync(request);
            string myJsonResponse = Newtonsoft.Json.JsonConvert.DeserializeObject(response.Result.Content.ReadAsStringAsync().Result).ToString();
            JObject jsonObject = JObject.Parse(myJsonResponse);

            Console.WriteLine(myJsonResponse);
            Console.WriteLine(jsonObject["data"][0]["destination"]);
            client.Dispose();
    }

    private static string getToken()
    {
        const string apikey = "";
        const string apisecret = "";
        const string tokenURL = "https://test.api.amadeus.com/v1/security/oauth2/token";

        string postData = $"grant_type=client_credentials&client_id={apikey}&client_secret={apisecret}";
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri(tokenURL);

        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "");
        request.Content = new StringContent(postData,
                                Encoding.UTF8,
                                "application/x-www-form-urlencoded");

        Task<HttpResponseMessage> response = client.SendAsync(request);
        if (response.Result.IsSuccessStatusCode)
        {
            string myJsonResponse = Newtonsoft.Json.JsonConvert.DeserializeObject(response.Result.Content.ReadAsStringAsync().Result).ToString();
            JObject jsonObject = JObject.Parse(myJsonResponse);
            client.Dispose();

            string token = (string)jsonObject["access_token"];
            return token;
        }
        else
        {
            Console.WriteLine("{0} ({1})", (int)response.Result.StatusCode, response.Result.ReasonPhrase);
            return response.Result.ReasonPhrase;
        }
      }
   }
}

getToken方法负责执行授权过程(如here所述)。

此内标识用于接口调用(在Main方法中)。它将被添加到Authorization标头,其值为:Bearer {token}

票数 3
EN

Stack Overflow用户

发布于 2019-06-27 03:13:33

首先,您需要获取访问令牌,以检索数据。我是如何做到这一点的,你可以在下面的代码中看到。

代码语言:javascript
复制
[HttpGet("[action]")]
    public async Task<List<FlightOffersModel>> GetData(string origin, string destination, string departureDate, string returnDate, string adults, string currency)
    {

        const string client_id = "oqsIlG0xAbnlXXXXXXXXXXg7GdYwemI5";
        const string client_secret = "lAcXXXXXXXXX5AD0";
        string token = await GetToken(client_id, client_secret);

        const string baseUrl = "https://test.api.amadeus.com/v1/";
        string urlParams = "shopping/flight-offers?origin=" + origin + "&destination=" + destination + "&departureDate=" + departureDate;
        urlParams += returnDate == "" || returnDate == null ? "" : "&returnDate=" + returnDate;
        urlParams += "&adults=" + adults + "&nonStop=false&currency=" + currency + "&max=50";
        FlightOffer ff = null;
        List<FlightOffersModel> model = new List<FlightOffersModel>();

        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(baseUrl);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/vnd.amadeus+json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

            HttpResponseMessage response = await client.GetAsync(urlParams);
            if (response.IsSuccessStatusCode)
            {
                var x = await response.Content.ReadAsStringAsync();
                var xx = JObject.Parse(x);
                ff = JsonConvert.DeserializeObject<FlightOffer>(xx.ToString());

                foreach (var fo in ff.Data)
                {
                    FlightOffersModel temp = new FlightOffersModel();
                    foreach (var item in fo.OfferItems)
                    {
                        foreach (var service in item.Services)
                        {
                            if (item.Services.IndexOf(service) < 1)
                            {
                                temp.BrojPresjedanjaPovratak = item.Services.Length > 1 ? GetBrojPresjedanja(item.Services[1]) : 0;
                                temp.BrojPresjedanjaOdlazak = GetBrojPresjedanja(item.Services[0]);
                                temp.BrojPutnika = GetBrojPutnika(service.Segments);
                                temp.UkupnaCijena = item.Price.Total;
                                temp.Valuta = ff.Meta.Currency;
                                temp.PolazniAerodrom = GetAerodromName(service.Segments, "departure", ff.Dictionaries.Locations);
                                temp.OdredisniAerodrom = GetAerodromName(service.Segments, "arrival", ff.Dictionaries.Locations);
                                temp.DatumPolaska = GetDatumLeta(service.Segments, "departure");
                                temp.DatumPovratka = GetDatumLeta(service.Segments, "arrival");

                                model.Add(temp);
                            }
                        }
                    }
                }
            }
        }
        return model;
    }

这部分代码用于获取访问令牌

代码语言:javascript
复制
const string client_id = "oqsIlG0xAbnlXXXXXXXXXXg7GdYwemI5";
    const string client_secret = "lAcXXXXXXXXX5AD0";
    string token = await GetToken(client_id, client_secret);

这是GetToken函数:

代码语言:javascript
复制
private async Task<string> GetToken(string client_id, string client_secret)
    {
        AccessToken s = null;
        using (var httpClient = new HttpClient())
        {
            using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://test.api.amadeus.com/v1/security/oauth2/token"))
            {
                request.Content = new StringContent("grant_type=client_credentials&client_id=" + client_id + "&client_secret=" + client_secret, Encoding.UTF8, "application/x-www-form-urlencoded");

                HttpResponseMessage response = await httpClient.SendAsync(request);

                if (response.IsSuccessStatusCode)
                {
                    s = await response.Content.ReadAsAsync<AccessToken>();
                }
            }
        }

        return s.Access_token;
    }

其余代码根据用户输入的参数提供数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56495723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档