Как перенаправить внешний URL-адрес API + учетные данные в мой локальный URL-адрес с помощью проекта Visual Studio WebAPI? - PullRequest
0 голосов
/ 31 мая 2019

В настоящее время у меня есть только учетные данные внешнего API в качестве маркера доступа к результатам в Postman, но я не могу внедрить URL и учетные данные в код c # с помощью ASP .NET Web API, который поставляется с образцом кода в контроллере, но в настоящее время у меня ничего нет внутри, потому что я не не знаю, как перенаправить внешний URL: https://api.elliemae.com/oauth2/v1/token к моему локальному URL-адресу

Результат почтальона

В настоящее время я только создал свой класс модели, предполагая, что он мне понадобится. Имя класса: Credentials.cs

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace APICredential.Models
{
    public class Credentials
    {
        public string grant_type { get; set; } = "password";
        public string username { get; set; } = "admin@encompass:BE11200822";
        public string password { get; set; } = "Sh**********";
        public string client_id {get;set;} = "gpq4sdh";
        public string client_secret { get; set; } = "dcZ42Ps0lyU0XRgpDyg0yXxxXVm9@A5Z4ICK3NUN&DgzR7G2tCOW6VC#HVoZPBwU";
        public string scope { get; set; } = "lp";


    }
}

Контроллер:

using APICredential.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Script.Serialization;

namespace APICredential.Controllers
{
    [RoutePrefix("api")]
    public class ValuesController : ApiController
    {

        [HttpPost, Route("post")]
        public async Task<string> Post([FromBody]Credentials cred)
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://api.elliemae.com/oauth2/");

                HttpRequestMessage request = new HttpRequestMessage
                (HttpMethod.Post, "v1/token")
                {
                    Content = new StringContent(new JavaScriptSerializer().Serialize(cred), Encoding.UTF8, "application/json")
                };

                HttpResponseMessage response = await client.SendAsync(request);

                //for now, see what response gets you and adjust your code to return the object you need, if the api is returning a serialized json string.. then we can return a string here... like so

                string result = await response.Content.ReadAsStringAsync();

                return result;
            }
        }


        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

1 Ответ

0 голосов
/ 31 мая 2019

вам нужно будет создать dto, обладающее свойствами, подобными тому, что вы отправляете в конечную точку API.а также модель для отображения данных, которые возвращаются

public class Credentials
{
    public string grant_type { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string client_id {get;set;}
    public string client_secret { get; set; }
    public string scope { get; set; }
}

, затем вы создадите его экземпляр и начнете присваивать значения перед его отправкой

это пойдет в вашМетод контроллера API

[RoutePrefix("api")]
public class ValuesController : ApiController
{

    // POST api/values
    [HttpPost, Route("values")]
    public async Task<string> Post()
    {
        Credentials cred = new Credentials()
        {
            grant_type = "password",
            username = "admin@encompass:BE11200822",
            password  = "Shmmarch18",
            client_id = "gpq4sdh",
            client_secret = "dcZ42Ps0lyU0XRgpDyg0yXxxXVm9@A5Z4ICK3NUN&DgzR7G2tCOW6VC#HVoZPBwU",
            scope = "lp"
        };

        try
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri("https://api.elliemae.com/oauth2/");

                HttpRequestMessage request = new HttpRequestMessage
                (HttpMethod.Post, "v1/token")
                {
                    Content = new StringContent(new JavaScriptSerializer().Serialize(cred), Encoding.UTF8, "application/x-www-form-urlencoded")
                };

                HttpResponseMessage response = await client.SendAsync(request);

                //for now, see what response gets you and adjust your code to return the object you need, if the api is returning a serialized json string.. then we can return a string here... like so

               string result = await response.Content.ReadAsStringAsync();

               return result;
           }
        }
        catch(Exception ex)
        {
             throw new Exception(ex.Message);
        }
    }
}

Возможно, вам придется сериализовать объект, возвращаемый из вызова API, если это так:

[RoutePrefix("api")]
public class ValuesController : ApiController
{
    // POST api/values
    [HttpPost, Route("values")]
    public string Post([FromBody]Credentials cred)
    {
        using (HttpClient client = new HttpClient())
        {
            client.BaseAddress = new Uri("https://api.elliemae.com/oauth2/");

            HttpRequestMessage request = new HttpRequestMessage
            (HttpMethod.Post, "v1/token")
            {
                Content = new StringContent(new JavaScriptSerializer().Serialize(cred), Encoding.UTF8, "application/json")
            };

            HttpResponseMessage response = await client.SendAsync(request);

           string result = new JavaScriptSerializer().Serialize(response.Content);

           return result;
       }
    }
}

Отличная работа!Хорошо, давайте проверим ваш API, давайте прокачаем ваш метод Get и упростим работу с ним, чтобы повысить моральный дух хе-хе

// GET api/values
[HttpGet, Route("values")]
public string Get(int id)
{
    return "Nice! At least we got this one working, Fay... the Id value you entered is: " + id.ToString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...