2016-04-07 7 views
5

Ich habe Schwierigkeiten, diese WebAPI zu arbeiten. Nun, arbeite mit IIS. Alles funktioniert gut in IIS Express, aber wenn ich es publiziere, funktioniert genau 1 API-Anfrage nicht. Ich versuche auf eine URL von API/[Controller]/{date}/{integer} zuzugreifen. Ich bekomme immer den Fehler 500 Server. Meine andere Route von API/[Controller]/{date} funktioniert.ASP.NET Core WebAPI 500 Interner Fehler in IIS 7.5

Hier ist meine API Controller:

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

könnte der Grund sein, dass ich eine Liste <> zurück bin versucht? Ich bin davon überzeugt, dass es in VS IIS Express funktioniert.

bearbeiten

Hier ist meine startup.cs Seite:

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

Haben Sie das Ereignisprotokoll des Servers überprüft? Normalerweise wird eine 500 durch eine Ausnahme verursacht, und oft finden Sie diese Details im 'Application Log' auf dem IIS-Rechner. – CodingGorilla

+0

können Sie die Verwendung Ihrer Zeichenfolge Datumsparameter untersuchen – InferOn

+0

@ Infer-On Was meinst du? – James

Antwort

8

Das ist ein guter Gedanke ist, dass es diese Tatsache könnte, dass Sie eine Liste sind zurück. Wir arbeiten mit Core Web API-Methoden und alle geben Task<IEnumerable<Foo>> zurück. Versuchen Sie, den Rückgabetyp List<TruckPosting>-Task<IEnumerable<TruckPosting>>

EDIT Ändern: Um die Details für 500 (interner Server) Fehler anzuzeigen, müssen Sie das folgende Codezeile am Anfang Ihrer Konfiguration (oder Configure1) Methode setzen:

app.UseDeveloperExceptionPage(); 

Und offensichtlich ist das nicht etwas, das Sie in einer Produktionsumgebung wollen.

EDIT2: Wenn Sie in VS ausführen, können Sie den folgenden Code verwenden, um Ausnahmedetails anzuzeigen, solange die Variable Hosting: Environment im Abschnitt Debuggen von Properties auf "Entwicklung" gesetzt ist. Nach dem Veröffentlichen müssen Sie eine Systemumgebungsvariable mit dem Namen ASPNET_ENV erstellen und den Wert auf "Entwicklung" setzen oder der Code wird die UseDeveloperExceptionPage() -Methode nicht aufrufen.

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

Deshalb wollen Sie 'if (env.IsDevelopment())' verwenden, damit Sie das '' nicht hinzufügen und entfernen müssen dev exception page " – Hypnobrew

+0

Ja, aber ich wusste nicht, wie er sein Projekt veröffentlicht hat, also habe ich die Umgebungsvariable nicht gesetzt, um das zu machen. Auf den zweiten Gedanken hätte ich wahrscheinlich. Ich werde die Antwort aktualisieren zeige das. –

+0

In Ordnung, also habe ich es eingegrenzt.Es hat etwas mit der Liste von Objekten zu tun, die ich zurückgebe.Ich habe das herausgefunden, denn wenn ich nur eine einfache Liste von ein paar Strings zurückgebe, funktioniert es gut. Ich weiß nicht, wie man es debuggt. Die app.UseDeveloperExceptionPage ändert nichts Hat es eine Reihenfolge, in die es gehen muss? – James

0

Ich habe heute eine benutzerdefinierte ASP.NET Core Ausnahmebehandler auf GitHub veröffentlicht. Ich dachte, es könnte hilfreich für Sie sein, da Sie ein SPA erstellen und wahrscheinlich eine Menge Web-API-Methoden aufrufen.

Es ist ein Middleware-Projekt, das Fehlermeldungen für Web-API-Aufrufe zurückgibt und auf eine Fehlerseite für Nicht-Web-API-Aufrufe umleitet. Es kann auch die Ausnahmen in einer SQL Server-Datenbank protokollieren. Dies geschieht in einem separaten Thread, um die Leistung zu verbessern.

Die Lösung enthält eine Demoanwendung, die zeigt, wie der Ausnahmebehandler sowohl für Web-API-Ausnahmen als auch für Web-API-Ausnahmen verwendet werden kann.

Hier ist der Link.
https://github.com/ClintBailiff/CustomExceptionHandler

Wenn Sie am Ende es auschecken und einige Vorschläge oder Kommentare haben, höre ich sie gerne.

Verwandte Themen