2017-02-22 6 views
1

So haben mit einem einfachen WebAPI Controller-I zu nennen ...Der Versuch, Javascript zu verwenden, um meine MVC WebAPI

[HttpGet] 
public string Demo() 
{ 
    System.Diagnostics.Debug.Print("API Demo call hit " + DateTime.Now.ToString()); 
    return "Got Here"; 
} 

Aufgrund der Debug-Ausgabe, kann ich sagen, dass es tatsächlich von meinem Javascript genannt zu werden. So weiß ich, dass mein Skript zumindest verbindet. Ich weiß auch, wenn ich eine Pause auf der Linie mache .. das Skript (HTML-Seite) pausiert und wartet, bis ich den Code fortfahren lasse. Also reden sie, aber ich habe 2 Probleme ...

1) Jedes Mal, wenn ich einen Sendeanruf mache, bekomme ich den Skriptfehler "NetworkError: Fehler beim Ausführen 'send' auf 'XMLHttpRequest': Fehler beim Laden ' http://localhost:64769/api/demo '"... obwohl ich weiß, dass es damit spricht. Aber ich habe bemerkt, dass, wenn ich NICHT nach Fehlern abtastet, das Skript in der Zeile "Senden" fehlschlägt und nicht fortfährt.

2) Allerdings, mit der Fehler-Trap, das Skript wird fortgesetzt (wie erwartet), aber die XMLHttpRequest hat meine Rückkehr nicht. (z. B. responseText ist leer) .. so ziemlich jede einzelne Eigenschaft des Objekts ist leer oder null.

Also ich denke, meine Antwort ist leer, weil es ein Problem mit dem "Senden" gibt. Aber weil es tatsächlich meinen Controller aufruft und darauf wartet, dass er läuft, bin ich verloren, was das Problem ist?

Hier ist mein Skript ...

function CallWebAPI() 
{ 
    var displayResults = document.getElementById('responseDetails'); 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.open("GET", "http://localhost:64769/api/demo", false); 

    try 
    { 
     xmlhttp.send(); 
    } 
    catch(err) 
    { 
     displayResults.innerHTML += err + "<br />"; 
    } 

    displayResults.innerHTML += "The Results...<br />"; 

    for (var key in xmlhttp) 
    { 
    displayResults.innerHTML += key + "---" + xmlhttp[key] + "<br />"; 
    } 

} 
+0

FYI .. Ich Fiddler nur verwenden meinen Aufruf an meine API zu beobachten. Laut Fiddler, den ich kaum zu benutzen weiß, sehe ich den Aufruf im Inspector und er zeigt meinen Rückgabewert im unteren Bereich (der obere Bereich zeigt den Client-Header, der untere Bereich zeigt die Rückgabe, die ich nehme). Es hört sich also immer mehr an, als würde mein Service funktionieren, aber mit der JavaScript-Seite stimmt etwas nicht? –

Antwort

1

Alle,

Also nach einem ganzen Tag und die halbe Herumspielen, dachte sie schließlich heraus. Ich glaube, ich habe eine HTML-Datei von meinem Desktop aus ausgeführt, und mein Webdienst lief unter http://localhost:64769.

Dies ist einer dieser domänenübergreifenden Dinge. Bei der Verwendung eines HTTP-Clients in .NET musste ich mich nicht damit befassen. Aber sobald ich versuchte, einen anderen Client als .NET zu verwenden, reagierte mein Webdienst tatsächlich. Aber der Client-Browser akzeptierte die Antwort nicht.

Das Update war mein api Dienst zu ändern ...

[HttpGet] 
    public HttpResponseMessage Demo() 
    { 
     string myReturnMessage = "API Demo call hit " + DateTime.Now.ToString(); 
     System.Diagnostics.Debug.Print(myReturnMessage); 

     HttpResponseMessage myReturn = this.Request.CreateResponse(System.Net.HttpStatusCode.OK, myReturnMessage); 

     //This was the KEY!!!! 
     myReturn.Headers.Add("Access-Control-Allow-Origin", "*"); 

     return myReturn; 
    } 
Verwandte Themen