Как вызвать функцию Function в том же контроллере, используя ASP.net MVC? - PullRequest
0 голосов
/ 20 мая 2019

Мне трудно вызывать функцию в том же контроллере.

Это моя функция, которая вызывает функцию GetToken

 [HttpPost]
        public ActionResult FileLoad()
        {
            using (var reader = new StreamReader("C:\\somedirectory\\Payout.csv"))
            using (var csv = new CsvReader(reader))
            {
                csv.Configuration.RegisterClassMap<FundTransferMap>();
                var json = JsonConvert.SerializeObject(csv.GetRecords<FundTransfer>());
                //Response.Write(json);
                TempData["FileJson"] = json;
                return RedirectToAction("GetToken");
            }
        }

Эта функция должна вызываться первой функцией

 [HttpPost]
        private async Task<ActionResult> GetToken()
        {
            var client = new HttpClient();
            var httpRequestMessage = new HttpRequestMessage
            {
                Method = HttpMethod.Post,
                RequestUri = new Uri("https://some-url.com//token"),
                Headers = {
                        //{ HttpRequestHeader.Authorization.ToString(), "Bearer xxxxxxxxxxxxxxxxxxxx" },
                        { HttpRequestHeader.Accept.ToString(), "application/json" },
                        { HttpRequestHeader.ContentType.ToString(), "application/x-www-form-urlencoded"},
                        { "client-id", "client-id"},
                        { "client-secret","client-secret"},
                        { "partner-id","partner-id"},
                        { "X-Version", "1" }

                    },
                Content = new FormUrlEncodedContent(new Dictionary<string, string>
                    {
                        { "client_id", "clientid" },
                        { "grant_type", "password" },
                        { "username", "username" },
                        { "password", "p@ssw0rd" },
                        { "scope", "scope" }
                    })
            };

            var response = client.SendAsync(httpRequestMessage).Result;
            var payload = JObject.Parse(await response.Content.ReadAsStringAsync());
            TempData["accessToken"] = payload.Value<string>("access_token");

        }

        return View();


Но этот код выдает ошибку во время выполнения, потому что это функция àsync. Я также не хотел, чтобы вторая функция возвращала что-то.

1 Ответ

2 голосов
/ 20 мая 2019

Я бы предложил переписать ваш метод GetToken() для возврата токена в виде строки.

private async Task<string> GetToken()
{
    var client = new HttpClient();

    // removed code for clarity

    var response = client.SendAsync(httpRequestMessage).Result;
    var payload = JObject.Parse(await response.Content.ReadAsStringAsync());
    var token = payload.Value<string>("access_token");
    return Task.FromResult(token);
}

Затем вы можете легко вызвать этот метод из любого другого метода контроллера, где вам нужно получить токен:

[HttpPost]
public ActionResult FileLoad()
{
    // removed code for clarity

    // call method GetToken();
    var token = await GetToken();
}
...