ARTICLE AD BOX
How can I display the function parameters(SessionTicket, Deviceid, Loginemail, Language) in Azure portal when I call my Azure function? I just want to find out if the function parameters are correct in my Azure function or if something is wrong with the parameters before I use JsonSerializer.Deserialize. Because I always get this exception in Azure portal when I use JsonSerializer.Deserialize.
The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0.
I have tried it with this code but nothing is displayed in Azure portal. What am I doing wrong? How can I display the parameters from the Json in Azure portal?
var s = await req.ReadAsStringAsync(); log.LogInformation($"req = {s}");Full 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<NewFunction> log; public NewFunction(ILogger<NewFunction> logger) { log = logger; } [Function("DeleteAccountSendEmail")] public async Task<HttpResponseData> DeleteAccountSendEmail( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestData req) { var s = await req.ReadAsStringAsync(); log.LogInformation($"req = {s}"); // FunctionExecutionContext<dynamic> context = JsonSerializer.Deserialize<FunctionExecutionContext<dynamic>>(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; } } }The local code that I use to call my Azure function:
public static async Task<(bool isbanned, bool isexpired, bool addedcredentials, string errorline1, string errorline2, string errorline3, string errorline4, string errorline5, string errorline6)> 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<ISerializerPlugin>(PluginContract.PlayFab_Serializer).DeserializeObject<Dictionary<string, object>>(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); }Edit:
This Hello World test doesn´t work. I cannot see the log Hello World in Azure portal.
[Function("DeleteAccountSendEmail")] public async Task<HttpResponseData> 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; }
