-1
我正嘗試從azure函數讀取POST內容。對於發展的原因,我決定將複製Azure的門戶網站的確切樣品和我的代碼如下:無法從Azure函數讀取POST內容
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; }
}
}
正如你所看到的,我的目標是要閱讀這篇文章,Desserialize我的實體,稱爲「Telemetria」並保存這到一個表格到我的天藍色的存儲帳戶。 我不知道爲什麼我不能讀這行內容: string data = await request.Content.ReadAsAsync<string>();
數據總是空的,我只是不知道爲什麼。 看來,因爲這是一個天藍色的函數,我不能模擬webapi的行爲。
任何幫助,歡迎。提前致謝。
由於您將內容反序列化爲'string',爲什麼不直接使用Content的'ReadAsStringAsync()'方法呢? 'string data = await request.Content.ReadAsStringAsync()' –