ASP.NET MVC应用程序仅在Firefox中查看时才提供内部服务器错误

时间:2014-02-25 20:07:39

标签: .net asp.net-mvc firefox iis static-files

(我是.Net和微软世界的新手,来自Java和Tomcat背景,所以请记住这一点。)

我正在使用Visual Studio 2013,C#,。Net 4.5,MVC 5和EF 6开发我的第一个.Net应用程序。这是一个相当简单的基于Web的应用程序,使用Windows身份验证和Active Directory组进行授权在SQL Server数据库的表上进行相当基本的CRUD操作。

我还没有部署应用程序。我还在开发它并在我的PC上运行(运行Windows 7)。当我按下Ctrl-F5在Internet Explorer或谷歌浏览器中测试应用程序时,一切正常。

但是,如果我告诉Visual Studio在Firefox中访问它,它会显示页面没有任何CSS或JavaScript。我可以单击应用程序中的链接并导航到各个页面,这些页面都可以正常工作。它们只显示没有任何CSS或工作JavaScript。当我手动尝试查看其中一个CSS或JavaScript文件时,我收到内部服务器错误(HTTP错误500)。检查日志文件会显示页面尝试加载的每个CSS和JavaScript文件的状态代码500。

我很神秘,因为它可以从Internet Explorer和Chrome中正常工作。如何使用不同的Web浏览器导致此内部服务器错误?

我发布了一些代码,但此时我不知道有什么用处。 (我可以显示IIS Express正在记录哪些附加信息,如果有的话,但我不知道在哪里找到它,除了显示状态代码500的行。)

在开发的早期阶段,我意识到当我希望它命名为“Version”(大写)时,我已经命名了一些数据库字段“version”。我在该字符串的整个解决方案中进行了全局查找/替换,而不是对该字段进行重命名。可能有一些重要的事情被这个过程所困扰,但我已经对“版本”(以及“版本”)进行了全局查找,并且没有找到任何值得注意的内容。

如果我绝对必须,我可能只是从头开始重新创建项目,并希望我不会将同样的问题(或新问题)复制/粘贴到新项目中,但我希望有人可以先想出更容易尝试的东西。

更新

以下是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"));
        }
    }
}

更新

查看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

更新

为了进行比较,以下是使用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

更新

在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时抛出的实际异常。

更新

研究错误代码,我发现它显然意味着“未提供所需的模拟级别,或者提供的模拟级别无效。”我猜测有一些关于Firefox处理与Internet Explorer和谷歌浏览器不同的身份验证方式,但我还不知道如何解决这个问题。

更新

作为一项实验,我在Visual Studio 2013中创建了一个全新的ASP.NET MVC项目,选择了Windows身份验证。然后,在不对此全新解决方案进行 ANY 更改的情况下,按Ctrl-F5构建它并在Firefox中打开默认主页。我在未触及的项目中得到完全相同的错误 - HTTP Server Error 500.0,错误代码为0x80070542,表示“未提供所需的模拟级别,或者提供的模拟级别无效。”

显然,它与我的代码无关,而是我的Visual Studio 2013,IIS Express和/或Windows 7的配置方式的基本问题。

我很难过。

2 个答案:

答案 0 :(得分:33)

G_P向我指出了我的问题的解决方案。根本原因显然是Firefox默认不使用Windows集成身份验证,除非该站点是可信任的。

在Firefox中启用Windows集成身份验证:

  1. 在地址栏中输入about:config
  2. 承认可怕的警告信息。
  3. 在搜索栏中输入network.automatic
  4. 双击network.automatic-ntlm-auth.trusted-uris
  5. 输入服务器的网址,例如localhostmycompany.com
  6. 之后它运作正常。

    不幸的是,这意味着要指导公司中想要使用Firefox访问应用程序的每个人都必须进行此更改(否则IT部门必须找到一种方法)。在这个特定的应用程序中,这不是什么大问题,因为用户数量会非常少。对于以后的应用程序,我可能需要弄清楚其他的东西。 (也许我应该研究Windows Identity Foundation?但听起来有些可怕。)

    无论如何,我打算称之为“现在足够好”并继续我的生活。非常感谢非常给所有帮助我的人!

    P.S。两页有可能有用的信息:

答案 1 :(得分:-1)

您在之前测试的浏览器上创建了一个cookie,该cookie在Firefox上没有退出。我真的怀疑这个问题是否与firefox有关。