Cela doit être quelque chose de vraiment stupide mais je ne peux pas penser quoi faire d'autre.
À l'aide de Visual Studio 2013 - Update 1, j'ai créé un projet Web Api 2 vide dans une solution existante, ajouté le package de prise en charge Cross Origin (cors) et créé un contrôleur Web Api de base.
La classe WebApiConfig semble bien:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
var cors = new EnableCorsAttribute("*","*","*");
config.EnableCors(cors);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Et aussi le Global.asax
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
Je lance ensuite l'application, IIS express démarre normalement et le navigateur démarre avec l'URL de l'application mais rien ne semble fonctionner.
Si l'URL est "localhost: numéro de port", j'obtiens Erreur HTTP 403.14 - Interdit Le serveur Web est configuré pour ne pas répertorier le contenu de ce répertoire.
Si j'essaie "localhost: numéro de port/api" j'obtiens Erreur HTTP 404.0 - Introuvable La ressource que vous recherchez a été supprimée, son nom a été modifié ou est temporairement indisponible.
J'ai regardé plusieurs blogs, tutoriels, exemples et je n'ai vu nulle part que quelque chose de spécial devait être fait. Quelqu'un pourrait-il faire la lumière sur ce qui pourrait me manquer?
Web Api n'a pas de page consultable par défaut (aspx, html, etc.) qui peut être visualisée en accédant à la racine (localhost:port
Dans ce cas). Voilà donc le comportement normal. Pour accéder à votre Api via le contrôleur, vous devez y accéder à l'aide du modèle de route spécifié dans votre méthode MapHttpRoute()
.
Donc, pour accéder à la méthode GET
dans votre API, vous devez ouvrir un navigateur et placer localhost:port/api/{controllername}
Dans l'url. {controllername}
Serait défini sur le nom de votre classe de contrôleur sans contrôleur ajouté à la fin.
ex: Si votre contrôleur ressemblait à ceci:
public class TestController : ApiController {
public HttpResponseMessage Get() {
return something;
}
public HttpResponseMessage Get(int id) {
return something with id;
}
}
Ensuite, votre URL pour la première Get()
ressemblerait à ceci:
localhost:port/api/test
Et l'url de la deuxième Get(int id)
ressemblerait à ceci:
localhost:port/api/test/5
Si la configuration de votre itinéraire est OK, vous pouvez essayer d'ajouter ceci dans Web.config:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>