Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Jquery Ajax -> MVC WebApi = status 404 Not Found

Pagina: 1
Acties:

  • Kenhas
  • Registratie: Oktober 2006
  • Laatst online: 21-11 16:06
Ik heb een gewone html pagina die met jquery een web api aanroept. Eigenlijk allemaal redelijk simpel

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
    $.ajax({
        url: "http://HV.local/api/ws_HV_Attesten/Get",
        type: "GET",
        crossDomain: true,
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        success: function(data) {...},
        error: function (error) {
            alert("Error: " + error.Error);
        }
    });


in mijn MVC project

C#:
1
2
3
4
5
6
7
8
9
   public class ws_HV_AttestenController : ApiController
    {
        [System.Web.Http.AcceptVerbs("GET")]
        [System.Web.Http.HttpGet]
        public string Get()
        {
            return "gelukt";
        }
}


CORS is enabled
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            var cors = new EnableCorsAttribute("*", "*", "*");
            config.EnableCors(cors);

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


Als ik de html pagina open, krijg ik in Chrome:
code:
1
2
Failed to load resource: the server responded with a status of 404 (Not Found)
XMLHttpRequest cannot load http://HV.local/api/ws_HV_Attesten/Get/. Invalid HTTP status code 404


In IE11 krijg ik in de console
code:
1
SCRIPT7002: XMLHttpRequest: Netwerkfout 0x80070005, Toegang geweigerd.

Maar als ik dan op de link klik, manueel invoer of via Fiddler krijg ik wel het antwoord op mijn request

code:
1
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">gelukt</string>


Ik weet dat het waarschijnlijk een enorm dwaas probleem zal zijn. Het zijn enkel maar van die domme dingen die mij overkomen ;) Maar ik geraak er echt niet uit.

2x Marstek Venus E 5.12 v153 - CT003 V117 - BMS 212 en 215


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Die EnableCorsAttribute moet je volgens mij op je Get() method instellen, Dus

code:
1
2
       [HttpGet, EnableCors("*", "*", "*")] 
        public string Get() { ... }


(AcceptVerbs("GET") is dubbelop en niet nodig)

en in je Register() gewoon config.EnableCors(); zonder params aanroepen.

  • Kenhas
  • Registratie: Oktober 2006
  • Laatst online: 21-11 16:06
Ik ben zeker geen expert op vlak van MVC dus er kunnen wel paar overbodige en/of minder correcte zaken in zitten.

Door EnableCors in de config te plaatsen, doe ik de instelling voor het ganse project, wat ook wel de bedoeling is. Het wordt een project dat ongeveer een 40-tal webservices zal bevatten. Op deze manier wou ik het voor alle 40 in één keer aanzetten ipv één voor één.

Van die AcceptVerbs heb je gelijk. Is eigenlijk dubbel. Was deze vergeten te verwijderen. Als iets niet lukt, probeert men vanalles en dus ook eens andere manieren om hetzelfde te bereiken. Wist ergens wel dat het daar niet aan lag maar je weet maar nooit

Zal nog eens beetje moeten zoeken. Aangezien er niet veel reacties zijn, zal het geen voor de hand liggend probleem zijn

2x Marstek Venus E 5.12 v153 - CT003 V117 - BMS 212 en 215


  • [ti]
  • Registratie: Februari 2000
  • Niet online
Krijg je als je Fiddler gebruikt wel een "Access-Control-Allow-Origin" header terug in de response? Als dat zo is, dan lijkt het me dat het fout gaat op de client en niet op de server.

  • robkorv
  • Registratie: Maart 2005
  • Laatst online: 26-10 20:43
Mis je niet config.MapHttpAttributeRoutes();?
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Enable Cross-Origin Requests
            var cors = new EnableCorsAttribute("*", "*", "*");
            config.EnableCors(cors);

            // Web API routes
            config.MapHttpAttributeRoutes();

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

  • [ti]
  • Registratie: Februari 2000
  • Niet online
In de voorbeeld code die hij geeft maakt hij helemaal geen gebruik van attribute routing, hij heeft 'n convention based route opgenomen (en dat zou prima moeten werken, en dat doet het ook als hij 't rechtstreeks via 'n browser request)...

  • Waster
  • Registratie: September 2006
  • Laatst online: 14-04 17:49
Wat is de url van de pagina waar je de html pagina laad. Heb je geprobeerd eerst de html pagina in dezelfde origin te draaien en kijken of dat werkt?

Waarom vraag je trouwens een json request op en response je met xml?

  • Kenhas
  • Registratie: Oktober 2006
  • Laatst online: 21-11 16:06
XML response krijg ik als ik op de link in Chrome console. Dat is dus geen json request.
Als ik via javascript een json request doe, komt er wel degelijk json terug.

Ik heb het probleem ondertussen gevonden. Waarom het juist een probleem is, weet ik niet.
Het heeft te maken met Integrated Application Pool en Classic.
Ik had een paar manieren opgezocht om toegang te verlenen op basis van hun rol binnen Active Directory. Verschillende zaken die ik tegenkwam, werkten enkel als de application pool op classic stond. Ik heb dat aangepast maar blijkbaar achteraf weer vergeten terug te zetten
Heb deze nu weer op integrated geplaatst en alles werkt terug.
Kan zijn dat bovenstaand niet helemaal klopt. Ik heb het enkele uren geleden aangepast maar nu pas hier kunnen antwoorden. Details zijn ondertussen al weer beetje vervaagd en zit nu niet meer aan die pc om het snel even na te kijken
Had dus op zich niets met verkeerde code te maken

2x Marstek Venus E 5.12 v153 - CT003 V117 - BMS 212 en 215

Pagina: 1