Ich arbeite mit ASP.NET MVC 4 WebApi und habe viel Spaß damit, es auf meinem lokalen Computer unter IIS Express auszuführen. Ich habe IIS Express so konfiguriert, dass es auch Remotecomputer bedient. Daher verwenden andere in meinem Unternehmen meinen Computer als Webserver.
Nachdem wir entschieden hatten, dass dies eine nicht optimale Lösung war, entschieden wir uns, WebApi nach der Installation von .NET 4.5 auf einem Remote-Server zu installieren. Wenn ich Fiddler verwende und einen POST an einen Controller auf meinem lokalen Computer sende, wird die richtige Antwort zurückgegeben. Wenn ich jedoch die Domäne auf den Webserver ändere, auf dem IIS7 ausgeführt wird, gibt derselbe POST eine kryptische Antwort zurück
{"message": "ein Fehler ist aufgetreten"}
Botschaft. Hat jemand eine Idee, was los sein könnte?
Antworten:
Das Problem war eine fehlende Abhängigkeit, die sich nicht auf dem Server befand, sondern auf meinem lokalen Computer. In unserem Fall war es eine Devart.Data.Linq-DLL.
Um zu dieser Antwort zu gelangen, habe ich die IIS-Ablaufverfolgung für 500 Fehler aktiviert. Das gab ein paar Informationen, aber das wirklich Hilfreiche war in der web.config-Einstellung.
<system.web><customErrors mode="Off"/></system.web>
Dies deutete auf eine fehlende dynamisch geladene Abhängigkeit hin. Nachdem diese Abhängigkeit hinzugefügt und angewiesen wurde, lokal kopiert zu werden, begann der Server zu arbeiten.quelle
mode="RemoteOnly"
und wenn Sie die Seite auf einem Webbrowser auf dem Server ausführen, werden die Fehler auchGrundsätzlich:
Verwenden Sie
IncludeErrorDetailPolicy
stattdessen, wennCustomErrors
es für Sie nicht gelöst wird (z. B. wenn Ihr ASP.NET-Stack> 2012 ist):Hinweis: Seien Sie vorsichtig, wenn Sie detaillierte Fehlerinformationen zurückgeben, die vertrauliche Informationen an "Hacker" weitergeben können. Siehe Simons Kommentar zu dieser Antwort unten.
TL; DR-Version
Für mich
CustomErrors
hat das nicht wirklich geholfen. Es war bereits eingestelltOff
, aber ich bekam immer noch nur eine dürftigean error has occurred
Nachricht. Ich denke, die akzeptierte Antwort stammt von vor 3 Jahren, was heutzutage eine lange Zeit im Web ist. Ich verwende Web API 2 und ASP.NET 5 (MVC 5) und Microsoft hat sich von einer Nur-IIS-Strategie entfernt, währendCustomErrors
es sich um altes Skool-IIS handelt;).Wie auch immer, ich hatte ein Produktionsproblem, das ich vor Ort nicht hatte. Und dann stellte ich fest, dass ich die Fehler auf der Registerkarte "Netzwerk" von Chrome nicht so sehen konnte wie auf meinem Entwicklungscomputer. Am Ende gelang es mir, das Problem zu lösen, indem ich Chrome auf meinem Produktionsserver installierte und dann auf dem Server selbst zu der dortigen App navigierte (z. B. auf 'localhost'). Dann traten detailliertere Fehler mit Stapelspuren und allem auf.
Erst danach fand ich diesen Artikel von Jimmy Bogard (Hinweis: Jimmy ist Herr AutoMapper! ). Das Lustige ist, dass sein Artikel ebenfalls aus dem Jahr 2012 stammt, aber darin erklärt er bereits, dass
CustomErrors
dies nicht mehr hilft, sondern dass Sie das 'IncludeErrorDetailPolicy
Fehlerdetail ' ändern können, indem Sie in der globalen WebApi-Konfiguration eine andere festlegen (z. B.WebApiConfig.cs
):Zum Glück erklärt er auch, wie man es einrichtet, dass webapi (2) Ihre
CustomErrors
Einstellungen hört . Das ist ein ziemlich vernünftiger Ansatz, mit dem Sie bis 2012 zurückkehren können: P.Hinweis: Der Standardwert ist 'LocalOnly'. Dies erklärt, warum ich das Problem so lösen konnte, wie ich es beschrieben habe, bevor ich diesen Beitrag gefunden habe. Aber ich verstehe, dass nicht jeder einfach per Fernzugriff zur Produktion und zum Starten eines Browsers gelangen kann (ich weiß, dass ich es meistens nicht konnte, bis ich mich entschied, freiberuflich und DevOps zu arbeiten).
quelle
if (DateTime.Now < new DateTime(2017, 6, 22)) { .... }
, um eine Option wie diese festzulegen. Dann kann ich es in der Produktion testen und morgen wird es auf magische Weise zum normalen Verhalten zurückkehren, wenn ich vergesse, es zu deaktivieren.Keine der anderen Antworten hat bei mir funktioniert.
Dies tat: (in Startup.cs)
(oder Sie können es in WebApiConfig.cs ablegen):
quelle
Ich komme immer zu dieser Frage, wenn ich in der Testumgebung auf einen Fehler stoße und mich erinnere: "Ich habe dies bereits getan, aber ich kann es direkt in der web.config tun, ohne Code ändern und erneut in der Testumgebung bereitstellen zu müssen , aber es dauert 2 Änderungen ... was war es wieder? "
Zum späteren Nachschlagen
UND
quelle
Ich hatte ein ähnliches Problem beim Posten auf dem WebAPI-Endpunkt. Durch Ausschalten von CustomErrors = Off konnte ich den tatsächlichen Fehler sehen, bei dem eine der DLLs fehlte.
quelle
Falls dies jemandem hilft:
Ich hatte ein ähnliches Problem und befolgte die Anweisungen von Nates, die ich hinzugefügt habe:
Dies zeigte mir mehr Informationen über den Fehler:
Zu diesem Zeitpunkt fiel mir ein, dass ich die edmx-Datei an einen anderen Speicherort verschoben und vergessen hatte, den Verbindungsstring-Knoten in der Konfiguration zu ändern (der Verbindungsstring-Knoten wurde mit "configSource" in einer separaten Datei abgelegt, aber das ist eine andere Geschichte).
quelle
Meine Swagger-XML-Datei wurde nicht in \ bin bereitgestellt:
http://wmpratt.com/swagger-and-asp-net-web-api-part-1/
Es musste sowohl in der Release-Konfiguration als auch in der Debug-Konfiguration festgelegt werden.
quelle
Wenn Sie
<deployment retail="true"/>
in der Datei machine.config Ihres .NET Frameworks keine detaillierten Fehlermeldungen sehen. Stellen Sie sicher, dass die Einstellung falsch oder nicht vorhanden ist.quelle
Also habe ich alle vorgeschlagenen Lösungen ohne Erfolg ausprobiert. Alles, was ich getan habe, war, die App vom Server aus auszuführen und den Fehler vollständig anzuzeigen. Dies hätte funktionieren sollen, wenn ich den customErrors-Modus auf false gesetzt habe, aber dies war nicht der Fall. In dem Moment, als ich die API vom Server aus durchsuchte, konnte ich das Problem erkennen.
quelle