2014-04-16 8 views
14

Questo deve essere qualcosa di veramente stupido ma non riesco a pensare a cos'altro fare.web api mostra l'errore 403.14 quando localhost: il numero di porta è nell'indirizzo del browser in iis express

Utilizzo di Visual Studio 2013 - Aggiornamento 1, ho creato un progetto web api 2 vuoto in una soluzione esistente, aggiunto il pacchetto cross origin support (cors) e creato un controller web api di base.

La classe WebApiConfig sembra andare bene:

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

E anche il Global.asax

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

ho quindi eseguire l'applicazione, IIS si avvia normalmente espressi e il browser inizia con l'URL dell'applicazione Ma niente sembra funzionare.

Se l'URL è "localhost: numero di porta" ottengo Errore HTTP 403.14 - Proibito Il server Web è configurato per non elencare il contenuto di questa directory.

Se provo "localhost: port number/api" ottengo Errore HTTP 404.0 - Non trovato La risorsa che stai cercando è stata rimossa, ha cambiato nome o è temporaneamente non disponibile.

Ho esaminato diversi blog, tutorial, esempi e non ho visto da nessuna parte che qualcosa di speciale debba essere fatto. Qualcuno potrebbe per favore fare un po 'di luce in quello che potrei mancare?

risposta

16

Web Api non ha una pagina visualizzabile predefinita (aspx, html, ecc.) Che può essere visualizzata navigando alla radice (localhost:port in questo caso). Quindi questo è il comportamento normale. Per accedere all'API tramite il controller è necessario accedervi utilizzando il modello di percorso specificato nel metodo MapHttpRoute().

Per accedere al metodo GET nell'API, aprire un browser e inserire localhost:port/api/{controllername} nell'URL. {controllername} verrebbe impostato sul nome della classe controller senza Controller aggiunto alla fine.

es: Se il controller si presentava così:

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

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

Poi il vostro URL per la prima Get() sarebbe simile a questa:

localhost:port/api/test 

e l'URL per il secondo Get(int id) sarebbe simile a questa :

localhost:port/api/test/5 
+1

Ho anche provato che e ottengo l'esploratore "Il sito non può visualizzare la pagina" e come la causa "Il sito ha un errore di programmazione" –

+0

può pubblichi parte della tua classe Controller in modo che possiamo vedere come sono i tuoi metodi? – jensendp

+0

Si scopre che stavo cercando di usare nomi personalizzati per i metodi e poi mi sono reso conto che questa API ammette solo i verbi http standard a meno che la definizione della rotta non venga modificata, il che non è un requisito per me proprio ora. Grazie per aver trovato il tempo di rispondere alla tua risposta mi ha fatto capire questo. –

1

Se la configurazione del percorso è OK di sicuro, si può provare aggiungere questo nel web.config:

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