Приложение ASP.NET MVC предоставляет внутреннюю ошибку сервера только при просмотре в Firefox
(Я новичок в .Net и мире Microsoft в целом, исходя из фона Java и Tomcat, поэтому, пожалуйста, помните об этом.)
Я работаю над своим первым .Net-приложением, используя Visual Studio 2013, С#,.Net 4.5, MVC 5 и EF 6. Это довольно простое веб-приложение, использующее проверку подлинности Windows и группы Active Directory для авторизации для выполнения простых операций CRUD в таблице в базе данных SQL Server.
Я еще не развернул приложение. Я все еще разрабатываю его и тестирую на своем ПК (под управлением Windows 7). Когда я нажимаю Ctrl-F5, чтобы проверить приложение в Internet Explorer или в Google Chrome, все работает нормально.
Однако, если я скажу Visual Studio, чтобы получить к нему доступ в Firefox вместо этого, он отображает страницу БЕЗ любых CSS или JavaScript. Я могу щелкнуть ссылки в приложении и перейти к различным страницам, которые все работают нормально. Они просто отображаются без CSS или рабочего JavaScript. Когда я вручную пытаюсь просмотреть один из файлов CSS или JavaScript, я получаю внутреннюю ошибку сервера (HTTP Error 500). Проверка файла журнала показывает код состояния 500 для каждого из файлов CSS и JavaScript, которые пыталась загрузить страница.
Я озадачен, потому что он отлично работает в Internet Explorer и Chrome. Как можно использовать другой веб-браузер для этой внутренней ошибки сервера?
Я бы опубликовал часть кода, но на данный момент я понятия не имею, что было бы полезно увидеть. (Я мог бы показать, какая дополнительная информация IIS Express регистрирует, если таковая имеется, но я не уверен, где ее найти, кроме строки, которая показывает код состояния 500.)
В какой-то момент довольно рано в разработке, я понял, что я назвал поле "версия" базы данных, когда я хотел, чтобы она называлась "Версия" (заглавная). Я сделал глобальную находку/замену во всем решении этой строки, вместо того, чтобы переименовывать это поле. Возможно, что что-то важное было увязано этим процессом, но я сделал глобальную находку в "Версии" (и на "версии" ) и ничего не заметил.
Если мне это абсолютно нужно, я, вероятно, просто заново создаю проект с нуля и надеюсь, что я не копирую и не вставляю ту же проблему (или новую) в новый проект, но я надеюсь кто-то может придумать что-то более легкое, чтобы попробовать в первую очередь.
UPDATE
Вот начало Views/Shared/_Layout.cshtml:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>@ViewBag.Title - Experiment 626</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
</head>
Вот App_Start\BundleConfig.cs:
using System.Web;
using System.Web.Optimization;
namespace Experiment626
{
public class BundleConfig
{
// For more information on bundling, visit http://go.microsoft.com/fwlink/?LinkId=301862
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.validate.min.js",
"~/Scripts/jquery.validate.unobtrusive.min.js"));
// Use the development version of Modernizr to develop with and learn from. Then, when you're
// ready for production, use the build tool at http://modernizr.com to pick only the tests you need.
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include(
"~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include(
"~/Scripts/bootstrap.js",
"~/Scripts/respond.js"));
bundles.Add(new StyleBundle("~/Content/css").Include(
"~/Content/bootstrap-theme.css",
"~/Content/site.css"));
}
}
}
UPDATE
В Firebug для каждого файла CSS или JavaScript заголовки запроса и ответа выглядят следующим образом:
Заголовок запроса
GET /Content/site.css HTTP/1.1
Host: localhost:6365
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0
Accept: text/css,*/*;q=0.1
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Referer: http://localhost:6365/
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Заголовок ответа
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcV2FsbHkuSGFydHNob3JuXFZpc3VhbCBTdHVkaW8gMjAxM1xQcm9qZWN0c1xFeHBlcmltZW50NjI2XEV4cGVyaW1lbnQ2MjZcQ29udGVudFxzaXRlLmNzcw==?=
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Tue, 25 Feb 2014 21:13:50 GMT
Content-Length: 5870
UPDATE
Для сравнения, вот заголовок запроса при использовании Chrome:
Accept:text/css,*/*;q=0.1
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:localhost:6365
Pragma:no-cache
Referer:http://localhost:6365/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36
UPDATE
На странице ошибок по умолчанию, отображаемой IIS, содержится подробная информация об ошибке, которая содержит следующее:
Module IIS Web Core
Notification AuthenticateRequest
Handler StaticFile
Error Code 0x80070542
Requested URL http://localhost:6365/Content/site.css
Physical Path C:\Users\Wally.Hartshorn\Visual Studio 2013\Projects\Experiment626\Experiment626\Content\site.css
Logon Method NTLM
Logon User SOMEDOMAIN\Wally.Hartshorn
Request Tracing Directory \\something.domain.com\SPIUsers1\Wally.Hartshorn\IISExpress\TraceLogFiles\EXPERIMENT626
Мне все еще не удалось выяснить, как просмотреть фактическое исключение, которое запускается для запуска кода состояния 500.
UPDATE
Изучив этот код ошибки, я обнаружил, что он, по-видимому, означает . Либо необходимый уровень олицетворения не был предоставлен, либо предоставленный уровень олицетворения недействителен. Я предполагаю, что есть что-то в этом вопросе способ Firefox обрабатывает аутентификацию, отличную от того, как Internet Explorer и Google Chrome, но я пока не знаю, как это исправить.
UPDATE
В качестве эксперимента я создал совершенно новый проект ASP.NET MVC в Visual Studio 2013, выбрав Windows Authentication. Затем, не делая изменений ANY в этом совершенно новом решении, я нажимаю Ctrl-F5, чтобы создать его и открыть домашнюю страницу по умолчанию в Firefox. Я получаю ту же ошибку в нетронутом проекте - HTTP Server Error 500.0 с кодом ошибки 0x80070542
, указывающим "Либо требуемый уровень олицетворения не был предоставлен, либо предоставленный уровень олицетворения недействителен".
По-видимому, это не имеет никакого отношения к моему коду, но вместо этого является основной проблемой с настройкой моей Visual Studio 2013, IIS Express и/или Windows 7.
Я в тупике.
Ответы
Ответ 1
G_P указал мне на решение моей проблемы. Основная причина, по-видимому, заключается в том, что Firefox по умолчанию не работает с Windows Integrated Authentication, если только сайту не доверено.
Чтобы включить встроенную проверку подлинности Windows в Firefox:
- Введите
about:config
в адресную строку.
- Подтвердите страшное предупреждение.
- В строке поиска введите
network.automatic
.
- Дважды щелкните по
network.automatic-ntlm-auth.trusted-uris
.
- Введите URL-адрес сервера, например.
localhost
или mycompany.com
.
После этого он отлично работает.
К сожалению, это означало бы инструктирование всем в компании, которые хотели получить доступ к приложению через Firefox, чтобы они могли внести это изменение (иначе ИТ-отдел должен был бы выяснить, как это сделать). В этом конкретном приложении это не очень важно, потому что количество пользователей будет довольно небольшим. Для более позднего приложения мне, вероятно, придется разобраться в чем-то другом. (Возможно, я должен смотреть в Windows Identity Foundation? Звучит немного страшно.)
В любом случае, я собираюсь назвать это "достаточно хорошим на данный момент" и продолжить свою жизнь. Спасибо очень всем, кто помог мне!
P.S. Две страницы с потенциально полезной информацией:
Ответ 2
У вас есть cookie, созданный в предыдущем браузере, который вы тестировали, который не выходит на firefox. Я действительно сомневаюсь, что проблема имеет какое-либо отношение к firefox.