2014-04-16 14 views
14

Das muss etwas wirklich dumm sein, aber ich kann nicht denken, was sonst noch zu tun.Web API zeigt 403.14 Fehler, wenn localhost: Port-Nummer ist in Browser-Adresse in IIS Express

Mit Visual Studio 2013 - Update 1 habe ich ein leeres Web-API-2-Projekt in einer bestehenden Lösung erstellt, das Cross-Origin-Support-Paket (cors) hinzugefügt und einen einfachen Web-API-Controller erstellt.

Die WebApiConfig Klasse scheint in Ordnung zu sein:,

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 } 
     ); 
    } 

Und auch IIS

protected void Application_Start() 
    { 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
    } 

ich dann führen Sie die Anwendung der Global.asax Express startet normal und der Browser startet mit der URL der Anwendung aber nichts scheint zu funktionieren.

Wenn die URL "localhost: Portnummer" ist, bekomme ich HTTP-Fehler 403.14 - verboten Der Webserver ist konfiguriert, den Inhalt dieses Verzeichnisses nicht auflisten.

Wenn ich versuche "localhost: Portnummer/api" bekomme ich HTTP-Fehler 404,0 - nicht gefunden Die Ressource, die Sie suchen, wurde entfernt, hatte seinen Namen geändert oder ist vorübergehend nicht verfügbar.

Ich habe mir mehrere Blogs, Tutorials, Beispiele angesehen und ich habe nirgendwo gesehen, dass etwas Besonderes zu tun ist. Könnte jemand bitte etwas Licht in das werfen, was ich vielleicht vermisse?

Antwort

16

Web Api hat keine Standardansichtsseite (aspx, html, etc), die angezeigt werden kann, indem zum Stamm navigiert wird (localhost:port in diesem Fall). Das ist also das normale Verhalten. Um über den Controller auf Ihre API zugreifen zu können, müssen Sie mit der in Ihrer MapHttpRoute()-Methode angegebenen Routenvorlage darauf zugreifen.

Um auf die GET Methode in Ihrer API zuzugreifen, würden Sie einen Browser öffnen und localhost:port/api/{controllername} in die URL platzieren. {controllername} würde auf den Namen Ihrer Controller-Klasse ohne Controller am Ende gesetzt werden.

ex: Wenn Ihr Controller sah wie folgt aus:

public class TestController : ApiController { 
    public HttpResponseMessage Get() { 
      return something; 
    } 

    public HttpResponseMessage Get(int id) { 
      return something with id; 
    } 
} 

Ihre URL für die erste Get() würde dann wie folgt aussehen:

localhost:port/api/test 

und die URL für die zweite Get(int id) würde wie folgt aussehen :

localhost:port/api/test/5 
+1

Ich habe auch versucht, dass und ich den Explorer „Die Website die Seite nicht anzeigen kann“ und als Ursache –

+0

„Die Website einen Programmierfehler hat“ Can Sie veröffentlichen einige Ihrer Controller-Klasse, damit wir sehen können, wie Ihre Methoden aussehen? – jensendp

+0

Es stellte sich heraus, dass ich versuchte, benutzerdefinierte Namen für die Methoden zu verwenden und dann erkannte, dass diese API nur die Standard-HTTP-Verben zulässt, es sei denn, die Routendefinition wurde geändert, was für mich gerade keine Voraussetzung ist. Danke, dass du dir die Zeit genommen hast, deine Antwort zu beantworten. –

1

Wenn Ihre Route Config OK ist sicher, können Sie dies in Web.config versuchen hinzufügen:

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>