C# [JavaScript] CORS (Cross-origin resource sharing) - Fehler 404

Nyxero

Cadet 4th Year
Registriert
Jan. 2015
Beiträge
105
Hallo zusammen,

vor einiger Zeit, habe ich schon einmal einen Post über ein ähnliches Thema erstellt.
Jedoch habe ich den Fehle dank euch finden und beseitigen können.

Nun habe ich erneut Probleme mit CORS und ich kann mir erneut kein Reim daraus machen was daran schuld sein könnte.

Hier noch einmal die Situation beschrieben:
Ich habe mit C# ein Windows Service Programmiert.
Dieser Service übernimmt einige interne Aufgaben für die Verwaltung.
Gleichzeitig hostet dieser Service eine im Netzwerk zugängliche Homepage als WEB API.

Das funktioniert alles soweit auch prima. Ich kann von einem anderen Rechner im Netzwerk auf die Homepage zugreiften und mir Informationen holen. Nun habe ich angefangen ein Admin Tool zu bauen in Form einer HTML/JavaScript Homepage (vorgeschrieben).

Nachdem ich das HTML Gerüst fertig hatte, habe eine Methode getestet um mir die Informationen einer dieser APIs zu holen. Die Funktion sieht folgender maßen aus:

Code:
function getClientObjFromJson()
    {
        var json = new XMLHttpRequest();
        json.open("GET", "http://192.168.XXX.XXX:48523"); // Lokal installierter Service
        json.send();
        var text = "Status: " + json.status + " ReadState: " + json.readyState + " Text: " + json.response;
        console.log(text);
    }

Die Homepage, welche dieses Script ausführt, wir auf einer Virtuellen Maschine von einem IIS gehostet (dadurch habe ich ein Origin im HTTP-Header).

Als Antwort bekomme ich folgendes:
XML Parsing Error: no root element found
Location: http://192.168.XXX.XXX:48523/
Line Number 1, Column 1:

Wenn ich die Homepage (die von dem Service gehostet wird) über den Link aufrufe ("http://192.168.XXX.XXX:48523")
bekomme ich eine Antwort und die Informationen die ich gerne hätte (in JSON format):
example.png

Soweit ich es abschätzen kann ist der Header auch korrekt:
Response headers:
Date "Tue, 11 Jul 2017 06:29:00 GMT"
Transfer-Encoding "chunked"
Content-Type "application/json; charset=utf-8"
Server "Kestrel"

Request headers:
Host "192.168.XXX.XXX:48523"
User-Agent "Mozilla/XX.XX (Windows NT X.X; … Gecko/20100101 Firefox/XX.0"
Accept "application/json"
Accept-Language "en-US,en;q=0.5"
Accept-Encoding "gzip, deflate"
Referer "http://192.168.XXX.XXX/XXX/index.html"
origin "http://192.168.XXX.XXX"
DNT "1"
Connection "keep-alive"
(Leider kein zweites Bild möglich)

Die Berechtigungen für eine Anfrage sind im Web-Host getroffen worden (das kann es also auch nicht sein).
Die Firewall blockiert auch nichts, das habe ich ebenfalls getestet.
(Beides wird hier etwas näher erklärt: https://www.computerbase.de/forum/threads/c-web-api-und-javascript-admin-cors-fehler.1692512/)

Hat da jemand eine Idee woran das liegen könnte, das ich die Fehlermeldung 404 File not Found bekomme obwohl ich über die URL eindeutig Informationen zurück bekomme?

Ich habe schon ca. mehr 24h darin investiert eine Lösung zu finden, leider ohne Erfolg.
 
Zuletzt bearbeitet:
Hi,

wie sieht deine Routing-Config aus und wie heißt dein Controller der die Werte zurückgibt? Ich finde es etwas ungewöhlich das du die api nur über ip: port ansprichst.

Default schaut es so aus:

Code:
            // Web-API-Routen
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

wenn du dann einen Controller der z.B "InfoController" heißt hast, ist dieser über "ip: port/api/info" anzusprechen usw.

Außerdem sagt die Fehlermeldung ja nicht das es ein CORS Fehler ist sondern "XML Parsing Error", also kann die Antwort wohl nicht als XML geparst werden.

Deine API liefert JSON du machst aber einen XMLHttpRequest.
(siehe dazu: https://www.w3schools.com/js/js_json_http.asp)

Sont kann man CORS folgendermaßen erlauben:
Code:
            var config = new HttpConfiguration();
            WebApiConfig.Register(config);

            app.UseWebApi(config);
            app.UseCors(CorsOptions.AllowAll);
 
Zuletzt bearbeitet:
Ja, ich bin etwas von dem Standard abgewichen.
Das große Problem an der gesamten Geschichte ist, dass das Projekt als ein Windows Service Projekt Implementiert wurde. Viele Ressourcen die für das Hosten von der API verwendet wurde, wurden nachträglich eingefügt.
Ich denke mittlerweile, dass da so einiges fehlt, bzw. mir das gesamte Projekt etwas über den Kopf wächst.

Da ich nicht selbständig den Host Implementiert habe, verstehe ich von dem gesamten nicht so viel. Ich denke das besser wäre, wenn ich das für mich Stück für Stück rekonstruiere und die Empfohlenen Ressourcen nutze und nicht dieses "AspNetCore.Mvc"


Ich habe da schon so viel Zeit rein Investiert ohne ein Erfolg.
 
Zuletzt bearbeitet:
nutze bitte fetch statt den veralteten xmlhttprequest klassen.. falls du unebdingt den internet explorer unterstützen willst.. polyfill nicht vergessen https://github.com/github/fetch
Code:
fetch('http://192.168.XXX.XXX:48523').then(response => response.json())
  .then(json => {
    console.log(json)
  })
 
Zurück
Oben