ASP.NET L'application MVC ne donne L'erreur du serveur interne que lorsqu'elle est vue dans Firefox
(je suis nouveau sur .Net et le monde Microsoft en général, venant d'un environnement Java et Tomcat, alors s'il vous plaît gardez cela à l'esprit.)
je travaille sur ma première application .Net, en utilisant Visual Studio 2013, C#, .Net 4.5, MVC 5, et EF 6. Il s'agit d'une application web assez simple, utilisant l'authentification Windows et les groupes Active Directory pour obtenir l'autorisation de faire des opérations CRUD assez basiques sur une table dans une base de données SQL Server.
Je n'ai pas encore déployé l'application. Je suis encore en train de le développer et de le tester sur mon PC (avec Windows 7). Lorsque je clique sur Ctrl-F5 pour tester L'application dans Internet Explorer ou dans Google Chrome, tout fonctionne très bien.
cependant, si je dis à Visual Studio d'y accéder dans Firefox à la place, il affiche la page sans tout CSS ou JavaScript. Je peux cliquer sur les liens dans l'application et naviguer vers les différentes pages, qui fonctionnent tous très bien. Ils sont simplement affichés sans CSS ou JavaScript. Lorsque j'essaie de visualiser manuellement un des fichiers CSS ou JavaScript, j'obtiens une erreur de serveur interne (erreur HTTP 500). La vérification du fichier journal montre un code d'État 500 pour chacun des fichiers CSS et JavaScript que la page essayait de charger.
je suis mystifié, parce qu'il fonctionne très bien D'Internet Explorer et de Chrome. Comment l'utilisation d'un autre navigateur Web pourrait-elle causer cette erreur de serveur interne?
je posterais bien du code, mais à ce stade je n'ai aucune idée de ce qui serait utile pour voir. (Je pourrais montrer quelle sorte d'information supplémentaire IIS Express se connecte, s'il y en a une, mais je ne sais pas où la trouver, à part la ligne qui montre le code de statut 500.)
à un certain point assez tôt dans le développement, j'ai réalisé que j'avais nommé un champ de base de données "version" quand je voulais qu'il soit nommé "Version" (en majuscules). J'ai fait une recherche globale/remplacer dans la solution entière sur cette chaîne, plutôt que de faire un changement de nom du champ. Il est possible que quelque chose d'important était bornée par ce processus, mais j'ai fait une recherche globale sur "Version" (Et Sur "version") et n'ai rien trouvé de notable.
si je dois absolument le faire, je vais probablement recréer le projet à partir de zéro et j'espère ne pas copier/coller le même problème (ou un nouveau) dans le nouveau projet, mais j'espère que quelqu'un pourra trouver quelque chose de plus facile à essayer en premier.
UPDATE
voici le début de 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>
Voici App_StartBundleConfig.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
en regardant dans Firebug, pour chaque fichier CSS ou JavaScript, les en-têtes de requête et de réponse ressemblent à ceci:
En-Tête De Requête
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
En-Tête De Réponse
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
a titre de comparaison, voici l'en-tête de requête lorsque vous utilisez 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
Dans la page d'erreur par défaut affichés par IIS, il y a une Erreur Détaillé des Informations de l'article, qui contient ceci:
Module IIS Web Core
Notification AuthenticateRequest
Handler StaticFile
Error Code 0x80070542
Requested URL http://localhost:6365/Content/site.css
Physical Path C:UsersWally.HartshornVisual Studio 2013ProjectsExperiment626Experiment626Contentsite.css
Logon Method NTLM
Logon User SOMEDOMAINWally.Hartshorn
Request Tracing Directory something.domain.comSPIUsers1Wally.HartshornIISExpressTraceLogFilesEXPERIMENT626
j'ai toujours été incapable de trouver comment visualiser l'exception réelle qui est lancée pour déclencher le code de statut 500.
UPDATE
en cherchant ce code d'erreur, j'ai trouvé qu'il signifie apparemment " soit qu'un niveau d'imitation requis n'a pas été fourni, soit que le niveau d'imitation fourni n'est pas valide." je devine il y a quelque chose à propos de la façon dont Firefox gère l'authentification qui est différent de la façon dont Internet Explorer et Google Chrome, mais je n'ai aucune idée encore comment corriger cela.
UPDATE
comme expérience, j'ai créé un tout nouveau ASP.NET projet MVC dans Visual Studio 2013, en sélectionnant L'authentification Windows. Puis, sans faire changements apportés à cette nouvelle solution, j'appuie sur Ctrl-F5 pour générer et ouvrez la page d'Accueil par défaut dans Firefox. J'obtiens exactement même erreur dans le projet intact -- erreur du serveur HTTP 500.0, avec un code d'erreur 0x80070542
, indiquant "soit qu'un niveau d'usurpation requis n'a pas été fourni, soit que le niveau d'usurpation fourni n'est pas valide."
donc apparemment ça n'a rien à voir avec mon code, mais c'est un problème de base avec la façon dont mon Visual Studio 2013, IIS Express, et/ou Windows 7 sont configurés.
je suis perplexe.
2 réponses
G_P m'a montré la solution à mon problème. La cause fondamentale est apparemment que Firefox ne fonctionne pas par défaut avec L'authentification intégrée de Windows, sauf si le site est fiable.
pour activer L'authentification intégrée de Windows dans Firefox:
- Entrée
about:config
dans la barre d'adresse. - accusez réception du message d'avertissement effrayant.
- Dans la barre de recherche, saisissez
network.automatic
. - Double-cliquez sur
network.automatic-ntlm-auth.trusted-uris
. - saisissez L'URL du serveur, par exemple
localhost
oumycompany.com
.
après ça ça marche très bien.
malheureusement, cela signifierait que tous les membres de L'entreprise qui veulent accéder à L'application à L'aide de Firefox devront effectuer ce changement (ou alors le service informatique devra trouver un moyen de le faire). Dans cette application particulière, ce n'est pas une grosse affaire, car le nombre d'utilisateurs sera assez faible. Pour plus tard l'application, je vais probablement trouver quelque chose d'autre. (Peut-être que je devrais regarder dans Windows Identity Foundation? Les sons un peu effrayant.)
dans tous les cas, je vais appeler ça "assez bien pour l'instant" et passer à autre chose. Merci très bien à tous ceux qui m'ont aidé!
P.S. deux pages potentiellement utiles informations:
vous avez un cookie créé sur le navigateur précédent que vous testiez et qui ne sort pas sur firefox. Je doute que le problème soit lié à firefox.