2016-05-06 13 views
2

Ich weiß, wie man eine Post-Anfrage mit angular zu einer API senden, aber fragte sich, wie Post-Anfrage von einer Anwendung gesendet abrufen.Senden Sie Beitrag Anfrage an Angular Seite von C# App

Lassen Sie sagen, ich diese C# Post-Anforderung haben:

public string sendPost(string data) 
    { 
     // Create a request using a URL that can receive a post. 
     WebRequest request = WebRequest.Create("http://localhost:5000/app/edit"); 
     // Set the Method property of the request to POST. 
     request.Method = "POST"; 
     // Create POST data and convert it to a byte array. 

     string postData = "{\"data\":\"" + data + "\"}"; 

     byte[] byteArray = Encoding.UTF8.GetBytes(postData); 
     // Set the ContentType property of the WebRequest. 
     request.ContentType = "application/json"; 
     // Set the ContentLength property of the WebRequest. 
     request.ContentLength = byteArray.Length; 
     // Get the request stream. 
     Stream dataStream = request.GetRequestStream(); 
     // Write the data to the request stream. 
     dataStream.Write(byteArray, 0, byteArray.Length); 
     // Close the Stream object. 
     dataStream.Close(); 
     // Get the response. 
     WebResponse response = request.GetResponse(); 
     // Display the status. 
     Console.WriteLine(((HttpWebResponse)response).StatusDescription); 
     // Get the stream containing content returned by the server. 
     dataStream = response.GetResponseStream(); 
     // Open the stream using a StreamReader for easy access. 
     StreamReader reader = new StreamReader(dataStream); 
     // Read the content. 
     string responseFromServer = reader.ReadToEnd(); 
     // Display the content. 
     Console.WriteLine(responseFromServer); 
     // Clean up the streams. 
     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 

     return responseFromServer; 
    } 

In meinem Winkel App habe ich diesen Controller:

(function() { 
    'use strict'; 

    angular.module('anbud') 
     .controller('editController', ['$scope', 'localStorage', 'md5', '$routeParams', 'httpError', 
      function ($scope, localStorage, md5, $routeParams, httpError) { 

       function processHeaderData() { 
        console.log($routeParams.json); 
       } 

       processHeaderData(); 

      }]); 

}()); 

Ich kann Daten über eine der URL senden und routeParams verwenden, aber ich möchte stattdessen POST verwenden. Wie greife ich auf die POST-Daten zu?

Antwort

0

Ich denke, Sie mischen Front-End-und Web-Server-Technologien.

Angular ist eine Front-End-Technologie, was Sie meinen, einen Post zu eckig zu schicken, bedeutet tatsächlich, eine Anfrage an den Webserver zu senden, der die eckige Website hostet.

Sobald Sie dies klarstellen, müssen Sie nur einen API-Aufruf an den Webserver senden, wie Sie mit angular tun, und der Server wird die JSON-Daten zurückgeben, die Sie benötigen.

Wenn Sie die HTML-Darstellung einer bestimmten Route erhalten möchten, gibt es leider keinen guten Weg, dies zu erreichen. Dies ist nicht besonders bei eckigen, jeder Standort, der Daten mit AJAX-Aufruf lädt, würde dieses Problem haben.

0

Angular $ http.post kann auch Daten abrufen. Aus Sicherheitsgründen ist dies sehr vorteilhaft. Logik dafür bleibt gleich.

Sie könnten Daten von Ihrer C# Controller über diese senden:

using System.Net; 
using System.Net.Http; 
using System.Web.Http; 

namespace Sample.API.Controllers 
{ 
    public class ContentDataController 
    { 

     [Route("api/ContentData")] 
     [HttpPost] 

     public HttpResponseMessage SamplePost(SampleRequest request) 
     { 
      HttpResponseMessage response; 
      try 
      { 
       var cda = dataContentAdapter(); 
       //Business logic here 
       var result = cda.GetContent(request); 

       //pass the above result to angular 
       response = Request.CreateResponse(HttpStatusCode.OK, result); 
       response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(300)); 
      } 
      catch (Exception ex) 
      { 
       ApplicationLogger.LogCompleteException(ex, "ContentDataController", "Post"); 
       HttpError myCustomError = new HttpError(ex.Message) { { "IsSuccess", false } }; 
       return Request.CreateErrorResponse(HttpStatusCode.OK, myCustomError); 
      } 
      return response; 
     } 
    } 
} 

Damit eine Anfrage von Winkeln mit dem, was Daten senden, die in Anforderung verwendet werden muss. Günstig ist es, JSON zu senden, analysieren Sie den JSON in Ihrer Geschäftslogik.

Erstellen Sie eine HttpResponseMessage mit der neuen Nutzlast für eckige $ http zu empfangen.

Verwandte Themen