web-dev-qa-db-fra.com

l'api web affiche une erreur 403.14 lorsque localhost: le numéro de port est dans l'adresse du navigateur dans iis express

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?

19
Sergio Romero

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
22
jensendp

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>
2
qba8