2017-10-16 3 views
-1

하늘색 함수에서 POST 내용을 읽으려고합니다. 나는 푸른 포털에서 정확한 샘플을 복사하기로 결정 이유를 개발하고 내 코드는 다음과 경우 : 내 목표는 "Telemetria"라고 내 법인이 POST 및 Desserialize를 읽고 저장하는 것입니다,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; } 
    } 
} 

당신이 볼 수 있듯이 이걸 내 푸른 창고 계정에 넣으세요. 이 줄의 내용을 읽을 수없는 이유는 모르겠습니다. string data = await request.Content.ReadAsAsync<string>(); 데이터는 항상 null이며 그 이유를 모르겠습니다. 이것은 하늘빛 함수이므로 webapi로 동작을 시뮬레이트 할 수 없습니다.

어떤 도움을 환영합니다. 미리 감사드립니다.

+0

콘텐츠를'문자열 '로 역 직렬화하기 때문에 Content의'ReadAsStringAsync()'메소드를 사용하지 않는 이유는 무엇입니까? '문자열 데이터 = 요청 대기 중 .Content.ReadAsStringAsync()' –

답변

0

를 들어 내가 Visual Studio 2017 업데이트 3 (v15.3)은, 우리가 미리 컴파일 된 푸른 하늘빛 기능을 만들 수

으로 푸른 포털에서 정확한 샘플을 복사하기로 결정 이유를 개발하고 우리가 그것을 디버깅 할 수 로컬로, 우리가 이것을 참조 할 수있는 더 자세한 정보는 blog입니다.

Andrés Nava - .NET은 (는) string data = await request.Content.ReadAsStringAsync()을 사용해보십시오. 작동해야합니다.

관련 문제