J'essaie de lire le contenu POST à partir de la fonction azur. Pour développer des raisons que je décide de copier l'échantillon exact de Portal Azure et mon code est le suivant:Impossible de lire le contenu POST à partir de la fonction Azure
using System;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.WindowsAzure.Storage; // Namespace for CloudStorageAccount
using Microsoft.WindowsAzure.Storage.Table; // Namespace for Table storage types
using System.Configuration;
using Newtonsoft.Json;
using System.IO;
namespace UnioAzureFunctions.Controllers
{
[RoutePrefix("api/telemetria")]
public class TelemetriaController : ApiController
{
[AllowAnonymous]
[HttpPost]
public async Task<HttpResponseMessage> Run(HttpRequestMessage request, TraceWriter log)
{
try
{
// parse query parameter
string name = request.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
.Value;
// Get request body
string data = await request.Content.ReadAsAsync<string>();
var telemetria = JsonConvert.DeserializeObject<Telemetria>(data);
// Set name to query string or body data
// name = name ?? data?.name;
//TODO: Usar CloudCOnfigurationManager ou ConfigurationManager normal *
//// Parse the connection string and return a reference to the storage account.
//CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
// CloudConfigurationManager.GetSetting("StorageConnectionString"));
#region conexão com cloud table storage
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
ConfigurationManager.AppSettings["StorageConnectionString"]);
// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
// Retrieve a reference to the table.
CloudTable table = tableClient.GetTableReference("telemetria");
// Create the table if it doesn't exist.
table.CreateIfNotExists();
// Create the TableOperation object that inserts the customer entity.
TableOperation insertOperation = TableOperation.Insert(telemetria);
// Execute the insert operation.
table.Execute(insertOperation);
#endregion
return name == null
? request.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: request.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
catch (Exception ex)
{
throw ex;
}
}
}
public class Telemetria : TableEntity
{
public Telemetria(string carteira, string crm, string app,
long idTenant, long idUsuario, string operadora, string action, DateTime dataHora)
{
Carteira = carteira;
Crm = crm;
App = app;
IdTenant = IdTenant;
IdUsuario = IdUsuario;
Operadora = operadora;
Action = action;
DataHora = dataHora;
}
public Telemetria()//não retirar - necessário para funcionar o tableEntity
{
}
public string Carteira { get; set; }
public string Crm { get; set; }
public string App { get; set; }
public long IdTenant { get; set; }
public long IdUsuario { get; set; }
public string Operadora { get; set; }
public string Action { get; set; }
public DateTime DataHora { get; set; }
}
}
Comme vous pouvez le voir, mon but est de lire ce message et Desserialize à mon entité appelée « Telemetria » et sauver ceci à une table dans mon compte de stockage d'azur. Je ne sais pas pourquoi je ne peux pas lire le contenu de cette ligne: string data = await request.Content.ReadAsAsync<string>();
les données sont toujours nulles et je ne sais pas pourquoi. Il semble que, puisqu'il s'agit d'une fonction azurée, je ne peux pas simuler le comportement en tant que webapi.
Toute aide est la bienvenue. Merci d'avance.
Puisque vous désérialisez le contenu en tant que chaîne, pourquoi ne pas simplement utiliser la méthode ReadAsStringAsync() 'du contenu? 'chaîne de données = wait request.Content.ReadAsStringAsync()' –