2016-04-29 11 views
1

Ich habe eine AngularJS-App, die Daten an eine URL eines Drittanbieters senden muss. Um das Problem mit dem CORS-Browser zu umgehen, posten wir die Daten auf meinem .net-Controller, der sie dann an die URL des Drittanbieters sendet. In meiner JavaScript-Datei habe ich die Abfragezeichenfolge erstellt, die ich an die URL des Drittanbieters weiterleiten möchte. Hier ist mein Code, die Beiträge meiner .net-Controller:AngularJs Abfrage-String an C# -Controller senden

var parms = "name=john&phone=1234567890&sex=male"; 
return $http({ 
        url: '/UserForm/PostData/', 
        method: "POST", 
        data: parms 
       }); 

My C# Controller:

[HttpPost] 
public string PostData(String parms) 
{ 
    return ""; 
} 

die parms Variable in Postdata ist null. Was muss ich tun, um meine Querystring-Zeichenfolge an meinen Controller zu übergeben?

+0

ist diese MVC oder Web API? –

+0

@ user1024941 - hat eine der Antworten Ihr Problem gelöst? Wenn dies der Fall ist, markieren Sie sie als akzeptiert. –

Antwort

1

Wenn dies für einen WebApi-Controller der Fall ist, anstatt parms als Parameter zu lesen, der an die Aktion übergeben wurde, verwenden Sie ReadAsString, um die geposteten Daten zu lesen. In Ihrem Beispiel sollte das Ergebnis der gleiche Wert in Ihrer parms Variable sein.

[HttpPost] 
public IHttpActionResult PostData() 
{ 
    var parms = Request.Content.ReadAsStringAsync().Result; 
    // Submit parms to third-party api. 
    return Ok(); 
} 

Diese Aufgabe ist besser geeignet für WebAPI, aber wenn Sie eine MVC-Controller verwenden müssen, können Sie lesen, was durch das Lesen Request.InputStream gepostet:

public ActionResult PostData() 
{ 
    string parms; 
    using (var sr = new System.IO.StreamReader(Request.InputStream)) 
    { 
     parms = sr.ReadToEnd(); 
    } 
    // Submit parms to third-party api. 
    return new EmptyResult(); 
} 
+0

das ist nicht sehr überprüfbar. –

+0

Ich bekomme den Fehler "system.web.httprequestbase" enthält keine Definition für 'Inhalt' ". – user1024941

+0

Scheint wie Sie MVC anstelle von WebApi verwenden. Siehe geänderte Antwort. –

0

du versuchen.

[HttpPost] 
public string PostData(System.Net.Http.Formatting.FormDataCollection form) 
{ 
    string name=form.get("name"); 
    string phone=form.get("phone"); 
    string sex=form.get("sex"); 
} 

Oder Sie können diese Lösung auch versuchen, Sie müssen nur ein paar Zeilen hinzufügen.

public class PersonData 
{ 
    public string name { get; set; } 
    public string phone { get; set; } 
    public string sex { get; set; } 
} 

[HttpPost] 
public string PostData([FromBody]PersonData form) 
{ 
    string name=form.name; 
    string phone=form.phone 
    string sex=form.sex; 
} 
+0

Dies gibt den Fehler der "Typ oder Namespace-Name 'Formatierung' ist nicht im Namespace 'system.net.http'" Ich habe mit System.Net.Http; ganz oben in meiner Klasse. – user1024941

+0

Haben Sie in Ihrem Projekt auf die System.Net.Http-Assembly verwiesen? – hdkhardik

2

Können Sie das versuchen? Erstens - warum definieren Sie nicht einfach alle Parameter in der Controller-Post-Request-Definition? Zweitens - ich denke, Sie einen Fehler in der URL haben, brauchen Sie nicht den Schrägstrich nach „/ Userform/Postdata“ (Wenn Sie nicht einige benutzerdefinierte Routing in Ihrem MVC natürlich verwenden)

$http.post("/UserForm/PostData", { name: "john", phone: "1234567890", sex: "male" }).then(blahblahal....; 

+

[HttpPost] 
public string PostData(String name, String phone, String sex) 
{ 
    return ""; 
} 
Verwandte Themen