Anonymous
Можно ли отобразить параметры из Json перед использованием JsonSerializer.Deserialize?
Сообщение
Anonymous » 31 дек 2025, 20:24
Как отображать параметры функции (SessionTicket, Deviceid, Loginemail, Language) на портале Azure при вызове функции Azure? Я просто хочу выяснить, верны ли параметры функции в моей функции Azure или что-то не так с параметрами, прежде чем использовать JsonSerializer.Deserialize. Потому что я всегда получаю это исключение на портале Azure, когда использую JsonSerializer.Deserialize.
Входные данные не содержат токенов JSON. Ожидается, что ввод
начнется с действительного токена JSON, если isFinalBlock имеет значение true. Номер строки:
0 | BytePositionInLine: 0.
Я пробовал использовать этот код, но на портале Azure ничего не отображается. Что я делаю не так? Как отобразить параметры из Json на портале Azure?
Код: Выделить всё
var s = await req.ReadAsStringAsync();
log.LogInformation($"req = {s}");
Полный код:
Код: Выделить всё
using System;
using System.Threading.Tasks;
using System.Text.Json;
using System.Collections.Generic;
using PlayFab;
using PlayFab.AdminModels;
using System.IO;
using System.Net;
using PlayFab.Samples;
using System.Linq;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
namespace My.Functions
{
public class Result
{
public bool FunctionSuccessful { get; set; }
public string Errorline1 { get; set; }
public string Errorline2 { get; set; }
public string Errorline3 { get; set; }
public string Errorline4 { get; set; }
public string Errorline5 { get; set; }
public string Errorline6 { get; set; }
public bool Isexpired { get; set; }
public bool Isbanned { get; set; }
public bool Zummenuweiterleitenmoeglich { get; set; }
public string Entityid { get; set; }
public string Entitytype { get; set; }
public string Playersessionticket { get; set; }
public string Playfabid { get; set; }
public DateTime Playersessionticketexpdate { get; set; }
}
public class NewFunction
{
private readonly ILogger log;
public NewFunction(ILogger logger)
{
log = logger;
}
[Function("DeleteAccountSendEmail")]
public async Task DeleteAccountSendEmail(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req)
{
var s = await req.ReadAsStringAsync();
log.LogInformation($"req = {s}");
// FunctionExecutionContext context = JsonSerializer.Deserialize(await req.ReadAsStringAsync());
// var args = context.FunctionArgument;
// string language = args["Language"];
// log.LogInformation($"MyLanguage = {language}");
// string loginemail = args["Loginemail"];
// log.LogInformation($" = {loginemail}");
bool updateaccountrecsuccessful = false;
string errorline1 = string.Empty;
string errorline2 = string.Empty;
string errorline3 = string.Empty;
string errorline4 = string.Empty;
string errorline5 = string.Empty;
string errorline6 = string.Empty;
bool isbanned = false;
bool isexpired = false;
log.LogInformation($"FunctionSuccessful: = {updateaccountrecsuccessful}");
var result1 = new Result
{
FunctionSuccessful = updateaccountrecsuccessful,
Errorline1 = string.Empty,
Errorline2 = string.Empty,
Errorline3 = string.Empty,
Errorline4 = string.Empty,
Errorline5 = string.Empty,
Errorline6 = string.Empty,
Isexpired = isexpired,
Isbanned = isbanned
};
var res1 = req.CreateResponse(HttpStatusCode.OK);
res1.Headers.Add("Content-Type", "application/json");
await res1.WriteStringAsync(JsonSerializer.Serialize(result1));
return res1;
}
}
}
Локальный код, который я использую для вызова функции Azure:
Код: Выделить всё
public static async Task DeleteAccountSendEmailAzure(this string language, string loginemail, string sessionticket, string deviceid, string entityid, string entitytype)
{
bool addedcredentials = false;
string errorline1 = string.Empty;
string errorline2 = string.Empty;
string errorline3 = string.Empty;
string errorline4 = string.Empty;
string errorline5 = string.Empty;
string errorline6 = string.Empty;
bool isbanned = false;
bool isexpired = false;
var result = await PlayFabCloudScriptAPI.ExecuteFunctionAsync(new ExecuteFunctionRequest()
{
Entity = new PlayFab.CloudScriptModels.EntityKey()
{
Id = entityid,
Type = entitytype,
},
FunctionName = "DeleteAccountSendEmail",
FunctionParameter = new { SessionTicket = sessionticket, Deviceid = deviceid, Loginemail = loginemail, Language = language },
GeneratePlayStreamEvent = true
});
if (result.Error != null)
{
var errors = OnPlayFabError(result.Error, language);
errorline1 = errors[0];
errorline2 = errors[1];
errorline3 = errors[2];
errorline4 = errors[3];
errorline5 = errors[4];
errorline6 = errors[5];
if (result.Error.Error == PlayFabErrorCode.NotAuthenticated)
{
isexpired = true;
}
if (result.Error.Error == PlayFabErrorCode.AccountBanned)
{
isbanned = true;
}
}
else
{
var data = PlayFab.PluginManager.GetPlugin(PluginContract.PlayFab_Serializer).DeserializeObject(result.Result.FunctionResult.ToString());
if (data.TryGetValue("functionSuccessful", out object a))
{
addedcredentials = Convert.ToBoolean(a);
}
if (data.TryGetValue("errorline1", out object b))
{
errorline1 = Convert.ToString(b);
}
if (data.TryGetValue("errorline2", out object c))
{
errorline2 = Convert.ToString(c);
}
if (data.TryGetValue("errorline3", out object d))
{
errorline3 = Convert.ToString(d);
}
if (data.TryGetValue("errorline4", out object e))
{
errorline4 = Convert.ToString(e);
}
if (data.TryGetValue("errorline5", out object f))
{
errorline5 = Convert.ToString(f);
}
if (data.TryGetValue("errorline6", out object g))
{
errorline6 = Convert.ToString(g);
}
if (data.TryGetValue("isexpired", out object h))
{
isexpired = Convert.ToBoolean(h);
}
if (data.TryGetValue("isbanned", out object i))
{
isbanned = Convert.ToBoolean(i);
}
}
return (isbanned, isexpired, addedcredentials, errorline1, errorline2, errorline3, errorline4, errorline5, errorline6);
}
Изменить:
Этот тест Hello World не работает. Я не вижу журнал Hello World на портале Azure.
Код: Выделить всё
[Function("DeleteAccountSendEmail")]
public async Task DeleteAccountSendEmail(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req)
{
log.LogInformation($"Hello World");
bool updateaccountrecsuccessful = false;
bool isbanned = false;
bool isexpired = false;
var result1 = new Result
{
FunctionSuccessful = updateaccountrecsuccessful,
Errorline1 = string.Empty,
Errorline2 = string.Empty,
Errorline3 = string.Empty,
Errorline4 = string.Empty,
Errorline5 = string.Empty,
Errorline6 = string.Empty,
Isexpired = isexpired,
Isbanned = isbanned
};
var res1 = req.CreateResponse(HttpStatusCode.OK);
res1.Headers.Add("Content-Type", "application/json");
await res1.WriteStringAsync(JsonSerializer.Serialize(result1));
return res1;
}
Подробнее здесь:
https://stackoverflow.com/questions/798 ... onserializ
1767201896
Anonymous
Как отображать параметры функции (SessionTicket, Deviceid, Loginemail, Language) на портале Azure при вызове функции Azure? Я просто хочу выяснить, верны ли параметры функции в моей функции Azure или что-то не так с параметрами, прежде чем использовать JsonSerializer.Deserialize. Потому что я всегда получаю это исключение на портале Azure, когда использую JsonSerializer.Deserialize. Входные данные не содержат токенов JSON. Ожидается, что ввод начнется с действительного токена JSON, если isFinalBlock имеет значение true. Номер строки: 0 | BytePositionInLine: 0. Я пробовал использовать этот код, но на портале Azure ничего не отображается. Что я делаю не так? Как отобразить параметры из Json на портале Azure? [code]var s = await req.ReadAsStringAsync(); log.LogInformation($"req = {s}"); [/code] Полный код: [code]using System; using System.Threading.Tasks; using System.Text.Json; using System.Collections.Generic; using PlayFab; using PlayFab.AdminModels; using System.IO; using System.Net; using PlayFab.Samples; using System.Linq; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; using Microsoft.Extensions.Logging; namespace My.Functions { public class Result { public bool FunctionSuccessful { get; set; } public string Errorline1 { get; set; } public string Errorline2 { get; set; } public string Errorline3 { get; set; } public string Errorline4 { get; set; } public string Errorline5 { get; set; } public string Errorline6 { get; set; } public bool Isexpired { get; set; } public bool Isbanned { get; set; } public bool Zummenuweiterleitenmoeglich { get; set; } public string Entityid { get; set; } public string Entitytype { get; set; } public string Playersessionticket { get; set; } public string Playfabid { get; set; } public DateTime Playersessionticketexpdate { get; set; } } public class NewFunction { private readonly ILogger log; public NewFunction(ILogger logger) { log = logger; } [Function("DeleteAccountSendEmail")] public async Task DeleteAccountSendEmail( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var s = await req.ReadAsStringAsync(); log.LogInformation($"req = {s}"); // FunctionExecutionContext context = JsonSerializer.Deserialize(await req.ReadAsStringAsync()); // var args = context.FunctionArgument; // string language = args["Language"]; // log.LogInformation($"MyLanguage = {language}"); // string loginemail = args["Loginemail"]; // log.LogInformation($" = {loginemail}"); bool updateaccountrecsuccessful = false; string errorline1 = string.Empty; string errorline2 = string.Empty; string errorline3 = string.Empty; string errorline4 = string.Empty; string errorline5 = string.Empty; string errorline6 = string.Empty; bool isbanned = false; bool isexpired = false; log.LogInformation($"FunctionSuccessful: = {updateaccountrecsuccessful}"); var result1 = new Result { FunctionSuccessful = updateaccountrecsuccessful, Errorline1 = string.Empty, Errorline2 = string.Empty, Errorline3 = string.Empty, Errorline4 = string.Empty, Errorline5 = string.Empty, Errorline6 = string.Empty, Isexpired = isexpired, Isbanned = isbanned }; var res1 = req.CreateResponse(HttpStatusCode.OK); res1.Headers.Add("Content-Type", "application/json"); await res1.WriteStringAsync(JsonSerializer.Serialize(result1)); return res1; } } } [/code] Локальный код, который я использую для вызова функции Azure: [code]public static async Task DeleteAccountSendEmailAzure(this string language, string loginemail, string sessionticket, string deviceid, string entityid, string entitytype) { bool addedcredentials = false; string errorline1 = string.Empty; string errorline2 = string.Empty; string errorline3 = string.Empty; string errorline4 = string.Empty; string errorline5 = string.Empty; string errorline6 = string.Empty; bool isbanned = false; bool isexpired = false; var result = await PlayFabCloudScriptAPI.ExecuteFunctionAsync(new ExecuteFunctionRequest() { Entity = new PlayFab.CloudScriptModels.EntityKey() { Id = entityid, Type = entitytype, }, FunctionName = "DeleteAccountSendEmail", FunctionParameter = new { SessionTicket = sessionticket, Deviceid = deviceid, Loginemail = loginemail, Language = language }, GeneratePlayStreamEvent = true }); if (result.Error != null) { var errors = OnPlayFabError(result.Error, language); errorline1 = errors[0]; errorline2 = errors[1]; errorline3 = errors[2]; errorline4 = errors[3]; errorline5 = errors[4]; errorline6 = errors[5]; if (result.Error.Error == PlayFabErrorCode.NotAuthenticated) { isexpired = true; } if (result.Error.Error == PlayFabErrorCode.AccountBanned) { isbanned = true; } } else { var data = PlayFab.PluginManager.GetPlugin(PluginContract.PlayFab_Serializer).DeserializeObject(result.Result.FunctionResult.ToString()); if (data.TryGetValue("functionSuccessful", out object a)) { addedcredentials = Convert.ToBoolean(a); } if (data.TryGetValue("errorline1", out object b)) { errorline1 = Convert.ToString(b); } if (data.TryGetValue("errorline2", out object c)) { errorline2 = Convert.ToString(c); } if (data.TryGetValue("errorline3", out object d)) { errorline3 = Convert.ToString(d); } if (data.TryGetValue("errorline4", out object e)) { errorline4 = Convert.ToString(e); } if (data.TryGetValue("errorline5", out object f)) { errorline5 = Convert.ToString(f); } if (data.TryGetValue("errorline6", out object g)) { errorline6 = Convert.ToString(g); } if (data.TryGetValue("isexpired", out object h)) { isexpired = Convert.ToBoolean(h); } if (data.TryGetValue("isbanned", out object i)) { isbanned = Convert.ToBoolean(i); } } return (isbanned, isexpired, addedcredentials, errorline1, errorline2, errorline3, errorline4, errorline5, errorline6); } [/code] [b]Изменить:[/b] Этот тест Hello World не работает. Я не вижу журнал Hello World на портале Azure. [code][Function("DeleteAccountSendEmail")] public async Task DeleteAccountSendEmail( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { log.LogInformation($"Hello World"); bool updateaccountrecsuccessful = false; bool isbanned = false; bool isexpired = false; var result1 = new Result { FunctionSuccessful = updateaccountrecsuccessful, Errorline1 = string.Empty, Errorline2 = string.Empty, Errorline3 = string.Empty, Errorline4 = string.Empty, Errorline5 = string.Empty, Errorline6 = string.Empty, Isexpired = isexpired, Isbanned = isbanned }; var res1 = req.CreateResponse(HttpStatusCode.OK); res1.Headers.Add("Content-Type", "application/json"); await res1.WriteStringAsync(JsonSerializer.Serialize(result1)); return res1; } [/code] [img]https://i.sstatic.net/EDPNVLNZ.png[/img] Подробнее здесь: [url]https://stackoverflow.com/questions/79858272/is-it-possible-to-display-the-parameters-from-the-json-before-i-use-jsonserializ[/url]