第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

通過WebApi返回JSON

通過WebApi返回JSON

C#
九州編程 2023-12-17 17:00:27
我正在使用 C# 中的 HttpClient 嘗試將 SSO(單點(diǎn)登錄)集成到我們的一些自定義應(yīng)用程序中。我已經(jīng)在我們的 JavaScript 應(yīng)用程序中成功完成了此操作,但我在將其集成到我們的一些 Umbraco 網(wǎng)站中時(shí)遇到了一些困難。到目前為止我的代碼:using System;using System.Threading.Tasks;using System.Net.Http;using System.Net.Http.Headers;using System.Web;using System.Web.Http;using Newtonsoft.Json;using System.Collections.Generic;using Umbraco.Web;using Umbraco.Web.WebApi;namespace Umbraco.WebApi{  public class TestController : UmbracoApiController  {    public  HttpClient client = new HttpClient();    [HttpPost]    public async Task<Object> GetRefreshToken(Token t)    {      try {        string refToken = t.refresh_token;        var values = new Dictionary<string, string>        {          { "grant_type", "refresh_token" },          { "client_id", "CLIENTID" },          { "client_secret", "CLIENTSECRET" },          { "refresh_token", refToken }        };        var content = new FormUrlEncodedContent(values);                var response = await client.PostAsync("https://URL.org/Token", content);        string responseString = await response.Content.ReadAsStringAsync();        return responseString;      } catch(HttpRequestException e) {        return e;      }    }    public class Token    {      public string refresh_token { get; set; }    }    public class AuthData    {      public string access_token { get; set; }      public string token_type { get; set; }      public int expires_int { get; set; }      public string refresh_token { get; set; }      public string userName { get; set; }      public string client_id { get; set; }      public DateTime issued { get; set; }      public DateTime expires { get; set; }    }  }}它確實(shí)成功返回了我想要的數(shù)據(jù),但返回的數(shù)據(jù)存在問題(刪除了敏感數(shù)據(jù)):<z:anyType xmlns:d1p1="http://www.w3.org/2001/XMLSchema" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" i:type="d1p1:string"></z:anyType>它似乎也以 XML 而不是 JSON 的形式返回?C# 不是我最擅長(zhǎng)的語(yǔ)言,所以我可能完全錯(cuò)了。
查看完整描述

3 回答

?
catspeake

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊

在您的代碼中,獲取 JSON 字符串后responseString,不要返回它,而是嘗試以下代碼。


...

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

response = Request.CreateResponse(HttpStatusCode.OK);

response.Content = new StringContent(responseString, Encoding.UTF8, "application/json");

return response;

您需要將方法返回值從 Task<Object> 更改為 Task<HttpResponseMessage>


編輯:


要訪問屬性,請(qǐng)安裝 Newtonsoft.Json 包并嘗試以下代碼。


var jsonString = ...

JObject jo = JObject.Parse(jsonString);

Console.WriteLine(jo["access_token"]);


查看完整回答
反對(duì) 回復(fù) 2023-12-17
?
浮云間

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超4個(gè)贊

要解決此問題,您可以執(zhí)行的操作之一是通過添加正確的請(qǐng)求標(biāo)頭來專門請(qǐng)求響應(yīng)中的 json 格式

Accept:?application/json

像這樣嘗試一下

client.DefaultRequestHeaders.Accept.Add(new?MediaTypeWithQualityHeaderValue("application/json"));

現(xiàn)在,如果服務(wù)器關(guān)注請(qǐng)求標(biāo)頭,它將返回一個(gè) json 給您。 它可能默認(rèn)為 xml,因?yàn)槟恼?qǐng)求中沒有此類標(biāo)頭,或者服務(wù)器僅支持返回 xml 響應(yīng)。

編輯:如果您無法讓服務(wù)器返回 json,您可以將 xml 字符串響應(yīng)轉(zhuǎn)換為 json 字符串。轉(zhuǎn)換后,您可以從控制器正常返回 json 字符串。

編輯:

好的,嘗試下面的示例:

var content = new FormUrlEncodedContent(new[]

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? new KeyValuePair<string, string>("client_id", ""),

? ? ? ? ? ? ? ? new KeyValuePair<string, string>("scope", ""),

? ? ? ? ? ? ? ? new KeyValuePair<string, string>("grant_type", "authorization_code"),

? ? ? ? ? ? ? ? new KeyValuePair<string, string>("redirect_uri", ""),

? ? ? ? ? ? ? ? new KeyValuePair<string, string>("code", ""),

? ? ? ? ? ? ? ? new KeyValuePair<string, string>("client_secret","")

? ? ? ? ? ? });


? ? ? ? ? ? AADTokenResponse TokenResponse = null;

? ? ? ? ? ? string _baseAddress = string.Format("https://yourTargetDomain.com/");


? ? ? ? ? ? using (var client = new HttpClient())

? ? ? ? ? ? {

? ? ? ? ? ? ? ? client.BaseAddress = new Uri(_baseAddress);

? ? ? ? ? ? ? ? client.DefaultRequestHeaders.Accept.Clear();

? ? ? ? ? ? ? ? client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


? ? ? ? ? ? ? ? var responseMessage = await client.PostAsync("targetApiSegment", content);


? ? ? ? ? ? ? ? if (responseMessage.IsSuccessStatusCode)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? var responseString = await responseMessage.Content.ReadAsStringAsync();

? ? ? ? ? ? ? ? ? ? TokenResponse = JsonConvert.DeserializeObject<AADTokenResponse>(responseString);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }


查看完整回答
反對(duì) 回復(fù) 2023-12-17
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

我認(rèn)為在這種情況下,FormUrlEncodedContent是錯(cuò)誤的選擇,你應(yīng)該使用StringContent,類似于:< /span>

var content = new StringContent(HttpUtility.UrlEncode(values), Encoding.UTF8, "application/json");
var response = await client.PostAsync("https://URL.com/Token", content);

原因是,我認(rèn)為 FormUrlEncodeContent 沒有重載來接受添加內(nèi)容類型。

另一種替代方法是改用 SendAsync 而不是 PostAsync,因?yàn)?SendAsync 具有一些額外的靈活性。


查看完整回答
反對(duì) 回復(fù) 2023-12-17
  • 3 回答
  • 0 關(guān)注
  • 221 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)