2016-04-07 15 views
5

Non riesco a far funzionare questa WebAPI. Bene, lavora con IIS. Tutto funziona perfettamente in IIS Express, ma quando lo pubblico, in particolare 1 richiesta API non funziona. Sto tentando di accedere a un URL API/[Controller]/{date}/{integer}. Continuo a ricevere l'errore del server 500. Il mio altro percorso di API/[Controller]/{date} funziona.ASP.NET Core WebAPI 500 Errore interno in IIS 7.5

Ecco il mio controller API:

[Route("api/[controller]")] 
    public class PostingsController : Controller 
    { 
     // GET: api/Postings/5 
     [HttpGet("{date}")] 
     public string Get(string date) 
     { 
      return date; 
     } 

     // GET api/Postings/20160407/2 
     [HttpGet("{date}/{modeID}")] 
     public List<TruckPosting> Get(string date, int modeID) 
     { 
      TruckPosting tp = new TruckPosting(); 
      List<TruckPosting> truckPostings = tp.GetTruckPostings(date, modeID); 
      return truckPostings; 
     } 
    } 

Potrebbe essere il motivo che sto cercando di restituire un elenco <>? Sono perplesso considerando che funziona bene in IIS Express di VS.

Modifica

Ecco la mia pagina startup.cs:

public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddMvc(); 
     } 

public void Configure1(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
      { 
       app.UseIISPlatformHandler(); 
       app.UseDefaultFiles(); 
       app.UseStaticFiles(); 
       app.UseFileServer(true); 
       app.UseMvc(); 
      } 

      // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
      { 
       app.Map("/appRoot", (app1) => this.Configure1(app1, env, loggerFactory)); 
      } 
+0

Hai controllato il registro eventi del server? Di solito un 500 è causato da un'eccezione e spesso è possibile trovare quei dettagli nel 'Log dell'applicazione 'sul computer IIS. – CodingGorilla

+0

puoi indagare sull'uso del tuo parametro data stringa – InferOn

+0

@ Infer-On Cosa intendi? – James

risposta

8

Questa è una buona idea che potrebbe il fatto che si sta restituendo un elenco. Abbiamo a disposizione i metodi dell'API Core Web e tutti restituiscono Task<IEnumerable<Foo>>. Provare a cambiare il tipo di ritorno List<TruckPosting>-Task<IEnumerable<TruckPosting>>

EDIT: Per visualizzare i dettagli per 500 errori (server interno) è necessario inserire la seguente riga di codice all'inizio del vostro Configure (o Configure1) Metodo:

app.UseDeveloperExceptionPage(); 

E ovviamente questo non è qualcosa che si desidera in un ambiente di produzione.

EDIT2: Quando si esegue in VS è possibile utilizzare il codice seguente per mostrare i dettagli delle eccezioni fino a quando la variabile Hosting: Environment nella sezione Debug di Properties è impostata su "Development". Dopo la pubblicazione sarà necessario creare una variabile di ambiente di sistema denominata ASPNET_ENV e impostarne il valore su "Sviluppo", altrimenti il ​​codice non chiamerà il metodo UseDeveloperExceptionPage().

if (env.IsDevelopment()) 
{ 
    app.UseDeveloperExceptionPage(); 
} 
+0

Ecco perché si desidera utilizzare 'if (env.IsDevelopment())' in modo da non dover aggiungere e rimuovere il ' dev exception page' – Hypnobrew

+0

Sì, ma non sapevo come stesse pubblicando il suo progetto, quindi non sono passato all'impostazione della variabile Environment per farlo funzionare.Per secondo pensavo che probabilmente dovrei avere.Aggiornerò la risposta a show that. –

+0

OK, quindi l'ho ristretto, è qualcosa che ha a che fare con la lista di oggetti che sto restituendo, l'ho capito perché se avessi appena restituito una semplice lista di poche stringhe, funzionava perfettamente. Non so come eseguire il debug. L'app.UseDeveloperExceptionPage non cambia nulla. l'ordine del cappello deve entrare? – James

0

Ho inviato un gestore di eccezioni personalizzate ASP.NET Core su GitHub oggi. Ho pensato che potrebbe esserti utile da quando stai creando una SPA e probabilmente stai chiamando molti metodi di API Web.

È un progetto middleware che restituisce messaggi di errore per le chiamate API Web e reindirizza a una pagina di errore per le chiamate API non Web. Può anche registrare le eccezioni in un database SQL Server. Questo è fatto in una discussione separata per aiutare con le prestazioni.

La soluzione include un'applicazione dimostrativa che mostra come utilizzare il gestore di eccezioni sia per le eccezioni API Web che per le eccezioni API non Web.

Ecco il link.
https://github.com/ClintBailiff/CustomExceptionHandler

Se si finisce per controllarlo e avere suggerimenti o commenti, mi piace ascoltarli.