Asp.Net Core - возвращает 500 без причины - PullRequest
0 голосов
/ 24 июня 2018

Я бы хотел попросить помощи в этом странном поведении.

У меня есть приложение Asp.Net Core (.Net Core версия 2.0), которое без проблем работает на моем компьютере с Windows 10, но когда яопубликуйте его на сервере Debian, он начнет странно себя вести.Я проверил файлы, sha1 приложения, которое работает в Windows, совпадает с sha1 приложения, которое странно работает в Debian.

У него есть несколько контроллеров без представлений - они работают без проблем (я просто возвращаю ObjectResultот них).И у меня есть один контроллер, который использует View, и всякий раз, когда я пытаюсь вызвать его на сервере Debian, он возвращает 500 Internal Server Error без какой-либо информации - просто пустой ответ.Я попытался загрузить отладочную версию на сервер, я попытался инкапсулировать методы контроллера в try-catch, но все по-прежнему -> пустой ответ 500.

Резюме:

+------------+----------+----------+
|            | Windows  | Debian   |
+------------+----------+----------+
| Controller | OK       | OK       |
| w/o view   |          |          |
|            |          |          |
| Controller | OK       | 500 Err  |
| with view  |          |          |
+------------+----------+----------+

Нетсообщение об ошибке, try-catch ничего не делает, режим отладки ничего не делает.

Вот журнал: https://pastebin.com/22AC8d4G Самое смешное, что у меня есть Form.cshtml в / View/ HouseForm: http://prntscr.com/jytj0f - и я попытался вставить его в / View / Shared.Он работает в Windows, но не работает в Debian.Возможно, проблема .Net Core?

Если вам нужна дополнительная информация, оставьте комментарий, и я отредактирую этот вопрос.

1 Ответ

0 голосов
/ 24 июня 2018

Хорошо, вот проблема:

Как показано в журнале, Asp не смог найти файл представления. Это работало в Windows, потому что в Windows путь запуска был установлен на один уровень выше папки / Views. Но в Debian путь запуска был установлен на два уровня выше папки / Views. Поэтому мне пришлось добавить это в программу:

        if (Directory.GetCurrentDirectory().EndsWith("3step"))
            Directory.SetCurrentDirectory(Path.Combine(Directory.GetCurrentDirectory(), "publish"));
...