Avatar billede smal64 Novice
19. oktober 2018 - 10:14 Der er 3 kommentarer og
2 løsninger

CORS problemer !!!

Hej Eksperter

Jeg har lavet et WEB API i Visual Studio 2017, som jeg skal anvende i forbindelse med undervisning og hvor alle mine elever så følgelig skal lave en klient, der via Ajax kald i jSon format kan kommunikere med den funktionalitet, som mit WEBApi tilbyder. Så server delen og klient delen ligger følgelig på forskellige domæner.
Mit problem er, at jeg ryger ind i CORS problemer, når jeg smider mit WEBApi op på forskellige servere. Jeg har prøvet at enable CORS efter alle kunstens regler og efter alt hvad jeg har kunnet læse mig til på nettet i mit WEB Api. Faktisk burde jeg have åbnet op for alle HTTP Requests fra alle URL adresser. Men lige lidt hjælper det. HTTP Get requests virker, som de skal, men PUT/POST og Delete virker ikke.
Jeg har lavet en klient selv til at teste med og jeg har også prøvet at teste med Postman. Når jeg bruger Postman, kommer der stadigvæk fejl tilbage i Responset fra mit WEBApi, men tingene virker som de skal. Hvilket jeg let kan se ved manuelt at inspicere indholdet af den database, der bliver håndteret af mit WEBApi. Når jeg bruger min egen udviklet klient, er der intet POST/PUT eller DELETE, der virker.
Når jeg kører mit WEBApi lokalt på min egen PC virker alt som det skal. Også selvom klienten også her ligger på en anden hjemmeside.

Lidt hjælp her så jeg kan komme videre, vil blive højt værdsat. Som det kan anes af det ovenfor skrevne, er jeg lidt presset, da jeg har 25 elever, der er afhængige at mit WEBApi.
Avatar billede moddi100 Seniormester
19. oktober 2018 - 10:23 #1
Hvilke CORS headere sætter du? Lyder som om du skal have sat Access-Control-Request-Method op til at understøtte alle typer. Se eksempel her:

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
Avatar billede arne_v Ekspert
19. oktober 2018 - 16:28 #2
CORS er super nemt i Web API.

[EnableCors(origins: "*", headers: "Content-Type", methods: "GET,POST,PUT,DELETE,OPTIONS")]

paa klassen og:

config.EnableCors();

i din konfiguration.
Avatar billede smal64 Novice
20. oktober 2018 - 09:36 #3
Hej moddi100 og arne_v

Først og fremmest mange tak for jeres hurtige feedback.

Jeg må dog også indrømme, at jeg som 100% programmør og meget få % netværks mand (vi nærmer os 0% her !!!), går jeg lidt kold i de beskrivelser, der er i det link, som du har givet mig moddi100. Det er selvfølgelig meget interessant læsning, men jeg går indrømmet lidt kold i det. Hvad jeg er interesseret i skåret ind til benet, er nogle virkende kode eksempler i javaScript/jQuery (helst i jQuery), der kommunikerer med et ASP.NET WEBAPI, der har CORS enabled som du beskriver det arne_v.

Der er et kode eksempel i linket du gav mig moddi100 -->

var invocation = new XMLHttpRequest();
var url = 'http://bar.other/resources/credentialed-content/';
   
function callOtherDomain(){
  if(invocation) {
    invocation.open('GET', url, true);
    invocation.withCredentials = true;
    invocation.onreadystatechange = handler;
    invocation.send();
  }
}

Men allerede der kommer mit manglende protokol kendskab til klart udtryk. Ideelt set vil jeg bare kunne fyre en GET Request afsted og så få nogle data tilbage fra mit WEBApi i jSOn format. Og det kan jeg også fint med jQuery koden herunder.

$.ajax({
                url: WEB_API_URL_Student,
                type: 'GET',
                context: {},
                dataType: "json",
                mimeType: 'text/html',
                contentType: 'text/html',
                crossDomain:true,
                headers: {
                    "Access-Control-Allow-Origin": "*",
                    "Accept": "application/json"
                },
                success: function (data) {
                    "Gør noget med de modtagne data"
              },
              error: function (xhr, ajaxOptions, thrownError) {
                    alert(xhr.status);
                    alert(thrownError);
                }
            });

Men når jeg forsøger at lave et post request til mit WEBAPi ved brug af jQuery koden vist herunder, får jeg fejl.

var data = { StudentFirstAndLastName: StudentFirstAndLastName }
                $.ajax({
                    url: WEB_API_URL_Student,
                    type: 'POST',
                    contentType: 'application/json',
                    data: JSON.stringify(data),
                    crossDomain: true,
                    dataType: 'json',
                    mimeType: 'text/html',
                    contentType: 'text/html',
                    crossDomain: true,
                    headers: {
                        "Access-Control-Allow-Origin": "*",
                        "Accept": "application/json"
                    },
                    success: function (dataBack) {
                      "Gør noget på baggrund af, at nyt data er gemt"
                  },
                  error: function (xhr, ajaxOptions, thrownError) {
                        //On error do this
                        alert(ajaxOptions);
                    }
                });

Hvilket jeg ikke lige helt kan forstå. Jeg har også haft WireShark koblet på min kommunikation mellem klient og Server (mit WEBApi), men jeg bliver ikke meget klogere ved at se logs herfra, da jeg som nævnt ikke er protokol mand.

Som beskrevet har jeg 25 unge mennesker til undervisning, der hver især skal lave en klient, som kommunikeret med mit WEBApi. Og hvis vi skal ind i dybere liggende diskussioner omkring CORS og alt hvad dette fører med sig, vil det være et kursus for sig selv. Så derfor min "desperate" søgen efter virkende kode eksempler, vi kan hive ned fra hylden. Og meget gerne virkende kode eksempler med alle 4 HTTP requests, som vi anvender => GET, POST, PUT og DELETE.

Så forhåbentlig har I også noget her, I kan fodre mig med.
Avatar billede arne_v Ekspert
20. oktober 2018 - 15:45 #4
http://www.vajhoej.dk/arne/articles/wsrest.html

Server - se "C# ASP.NET Web API" eksemplet (fjern //// for at enable CORS).

Client - se "JavaScript jQuery".

De er testet sammen med brug for CORS.

Alle 4 metoder.
Avatar billede smal64 Novice
22. oktober 2018 - 22:28 #5
Sådan arne_v. Jeg fulgte dine guides og ved brug af disse og et par små justeringer i min kode kører det hele nu. Så nu er jeg klar til at køre videre med mine elever i morgen.

Det er et imponerende stykke arbejde, du har lavet og med dejlige konkrete eksempler, så man ikke bliver spundet ind i alt muligt andet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester