Was ist der einfachste Weg, dieses Problem zu lösen, wenn ich JsonSerializer.Deserialize nicht verwenden kann, weil ich in dieser Zeile immer eine Ausnahme erhalte (in meinem Projekt in Visual Studio Code ist es Zeile 444):
Code: Select all
FunctionExecutionContext context = JsonSerializer.Deserialize(await req.ReadAsStringAsync());
Code: Select all
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)
{
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;
}
}
}
Executing 'Functions.DeleteAccountSendEmail' (Reason='Diese Funktion wurde programmgesteuert über die Host-APIs aufgerufen.', Id=d09b0bb2-5bde-49fe-8a48-846a2e98fd29)
Die Eingabe enthält kein JSON Token. Es wurde erwartet, dass die Eingabe mit einem gültigen JSON-Token beginnt, wenn isFinalBlock „true“ ist. Zeilennummer: 0 | BytePositionInLine: 0.
Ergebnis: Fehlertyp: Ausnahme: System.Text.Json.JsonException: Die Eingabe enthält keine JSON-Token. Es wurde erwartet, dass die Eingabe mit einem gültigen JSON-Token beginnt, wenn isFinalBlock „true“ ist. Pfad: $ | Zeilennummer: 0 | BytePositionInLine: 0. ---> System.Text.Json.JsonReaderException: Die Eingabe enthält keine JSON-Token. Es wurde erwartet, dass die Eingabe mit einem gültigen JSON-Token beginnt, wenn isFinalBlock „true“ ist. Zeilennummer: 0 | BytePositionInLine: 0. bei System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resources, Byte nextByte, ReadOnlySpan
Code: Select all
1 bytes) at System.Text.Json.Utf8JsonReader.Read() at System.Text.Json.Serialization.JsonConverterCode: Select all
1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpanCode: Select all
1 jsonTypeInfo, NullableCode: Select all
1 json, JsonTypeInfoCode: Select all
1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpanCode: Select all
1 jsonTypeInfo, NullableCode: Select all
1 json, JsonTypeInfoIch verwende diesen Code, um meine Azure-Funktion aufzurufen:
Code: Select all
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);
}
Ich habe erneut versucht, meine Azure-Funktion aufzurufen, und hier ist, was ich in meinem PlayFab-Konto gefunden habe:
{
"SchemaVersion": "2.0.1",
"FullName": {
"Namespace": "playfab.functions",
"Name": "function_executed"
},
"Id": "ee1b53290a8a4cc9af3558058b92abb5",
"Timestamp": "2025-12-30T22:41:18.2403127Z",
"Entity": {
"Id": "E90B78808A2382E0",
"Typ": "title_player_account"
},
"EntityProfile": null,
"Originator": {
"Id": "E90B78808A2382E0",
"Typ": "title_player_account"
},
"OriginInfo": {
"Id": null,
"Timestamp": null,
"CustomTags": null,
"Key": null
},
"Context": null,
"Payload": „{“Source“API“, „FunctionName“ „DeleteAccountSendEmail“, „ExecutionTimeMilliseconds“:0, „Result“: {“ErrorCode“: „CloudScriptAzureFunctionsHTTPRequestError“, „Message“: „Aufruf
der Cloud-Skriptfunktion „DeleteAccountSendEmail“ ist mit HTTP-Status „InternalServerError“ und Antworttext fehlgeschlagen />","ErrorAndMessage":{"Item1": "CloudScriptAzureFunctionsHTTPRequestError", "Item2": Der Aufruf
der Cloud-Skriptfunktion "DeleteAccountSendEmail" ist mit dem HTTP-Status "InternalServerError" und dem Antworttext fehlgeschlagen. "}},"ResultTooLarge":false}",
"EntityLineage": {
"namespace": "4CE2E85814BA15CA",
"title": "XXXXX",
"master_player_account": "57440D2996790D06",
"title_player_account": "E90B78808A2382E0"
},
"PayloadContentType": 1,
"ExperimentVariants": null
BEARBEITEN:
Ich habe meinen Code geändert, aber log.LogInformation($"req = {s}"); Zeigt die Inhalts-/Funktionsparameter nicht im Azure-Portal an. Wie kann ich die Funktionsparameter (SessionTicket, Deviceid, Loginemail, Language) im Azure-Portal anzeigen? Ich möchte nur herausfinden, ob die Funktionsparameter korrekt sind? Aber normalerweise sollten sie korrekt sein.
Code: Select all
[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;
}

Mobile version