Я работаю с ASP.NET MVC 4 WebApi и мне очень нравится запускать его на моем локальном компьютере в IIS Express. Я также настроил IIS Express для обслуживания удаленных компьютеров, поэтому другие сотрудники моей компании используют мой компьютер в качестве нашего веб-сервера.
После того, как мы решили, что это решение не является оптимальным, мы решили разместить WebApi на удаленном сервере после установки .NET 4.5. Когда я использую fiddler и отправляю POST на контроллер на моем локальном компьютере, он возвращает правильный ответ, но когда я меняю домен на веб-сервер под управлением IIS7, тот же POST возвращает загадочный
{"message": "произошла ошибка"}
сообщение. У кого-нибудь есть идеи, что может происходить?
Ответы:
Проблема заключалась в отсутствующей зависимости, которая отсутствовала на сервере, но была на моей локальной машине. В нашем случае это была библиотека Devart.Data.Linq.
Чтобы получить такой ответ, я включил трассировку IIS для 500 ошибок. Это дало немного информации, но действительно полезно было установить в web.config параметр
<system.web><customErrors mode="Off"/></system.web>
This, указывающий на отсутствующую динамически загружаемую зависимость. После добавления этой зависимости и указания на ее локальное копирование сервер начал работать.источник
mode="RemoteOnly"
и если вы запустите страницу в веб-В принципе:
IncludeErrorDetailPolicy
Вместо этого используйте, еслиCustomErrors
это не решает для вас (например, если вы используете ASP.NET> 2012):Примечание. Будьте внимательны, возвращая подробную информацию об ошибке, которая может раскрыть конфиденциальную информацию хакерам. См. Комментарий Саймона к этому ответу ниже.
TL; DR версия
Для меня
CustomErrors
это не очень помогло. Это было уже установленоOff
, но я все еще получил только жалкоеan error has occurred
сообщение. Я предполагаю, что принятый ответ от 3 лет назад, который является долгое время в веб-слове в настоящее время. Я использую Web API 2 и ASP.NET 5 (MVC 5), и Microsoft отошла от стратегии,CustomErrors
основанной только на IIS, в то время как старый skool IIS;).В любом случае, у меня была проблема с производством, которой у меня не было на месте. А потом обнаружил, что не вижу ошибок на вкладке «Сеть» Chrome, как на своей машине разработчика. В конце концов мне удалось решить эту проблему, установив Chrome на свой производственный сервер и затем перейдя к приложению на самом сервере (например, на «localhost»). Потом появились более подробные ошибки со следами стека и все.
Только после этого я нашел эту статью от Джимми Богарда (Примечание: Джимми - мистер AutoMapper! ). Самое смешное, что его статья также написана в 2012 году, но в ней он уже объясняет, что
CustomErrors
это больше не помогает, но что вы МОЖЕТЕ изменить «IncludeErrorDetailPolicy
Сведения об ошибках», установив другое в глобальной конфигурации WebApi (напримерWebApiConfig.cs
):К счастью, он также объясняет, как настроить, чтобы webapi (2) слушал ваши
CustomErrors
настройки. Это довольно разумный подход, и это позволяет вам вернуться к 2012 году: P.Примечание. Значение по умолчанию - «LocalOnly», что объясняет, почему я смог решить проблему так, как я описал, до нахождения этого поста. Но я понимаю, что не все могут просто подключиться к производству и запустить браузер (я знаю, что в основном не мог, пока не решил заняться фрилансом и DevOps).
источник
if (DateTime.Now < new DateTime(2017, 6, 22)) { .... }
установки опции, подобной этой. Затем я могу протестировать его на производстве, и завтра он волшебным образом вернется к нормальному поведению, если я забуду его отключить.Ни один из других ответов не работал для меня.
Это сделал: (в Startup.cs)
(или вы можете поместить его в WebApiConfig.cs):
источник
Я всегда прихожу к этому вопросу, когда сталкиваюсь с ошибкой в тестовой среде и вспоминаю: «Я делал это раньше, но я могу сделать это прямо в web.config без необходимости изменять код и повторно развертывать в тестовой среде. , но требуется 2 изменения ... что это было снова? "
Для дальнейшего использования
И
источник
У меня была похожая проблема при публикации в конечной точке WebAPI. Повернув CustomErrors = Off, я смог увидеть фактическую ошибку, которая отсутствовала в одной из библиотек.
источник
На случай, если это кому-нибудь поможет:
У меня была похожая проблема, и я добавил следующие инструкции Нейтса:
Это показало мне больше информации об ошибке:
В этот момент я вспомнил, что переместил файл edmx в другое место и забыл изменить узел строк соединений в конфигурации (узел соединений был помещен в отдельный файл с использованием «configSource», но это уже другая история).
источник
Мой файл swagger XML не был развернут в \ bin:
http://wmpratt.com/swagger-and-asp-net-web-api-part-1/
Это должно быть установлено в Конфигурации выпуска, а также в Конфигурации отладки.
источник
Если
<deployment retail="true"/>
в вашем компьютере .NET Framework есть файл machine.config, вы не увидите подробных сообщений об ошибках. Убедитесь, что параметр имеет значение false или отсутствует.источник
Поэтому я попробовал все предложенные решения безрезультатно. Все, что я сделал, это установил запуск приложения с сервера, и он отображал ошибку полностью, это должно было сработать, когда я установил режим customErrors в false, но это не так. В тот момент, когда я просматривал API-интерфейс сервера, я смог увидеть проблему.
источник