You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Asp.net Core 2.0项目发布至IIS后仅显示空白页问题求助

ASP.NET Core 2.0部署IIS后页面空白问题排查方案

我之前也碰到过类似的情况——数据库能正常初始化但页面一片空白,连错误提示都没有,大概率是IIS配置、应用启动环节或者路由出了问题,咱们一步步来排查:

  • 先确认ASP.NET Core运行环境是否齐全
    服务器上必须安装对应版本的ASP.NET Core Runtime(2.0.x系列)和AspNetCoreModule模块。你可以去控制面板→程序→程序和功能里核对有没有这两个组件,缺的话赶紧补上,安装完重启IIS再试。

  • 扒日志找线索(关键!)
    页面没错误不代表没异常,日志里肯定藏着原因:

    • 应用日志:看你部署的站点目录里有没有logs文件夹,如果没有,先把web.config里的stdoutLogEnabled改成true,重启站点后会生成日志文件,里面能看到应用启动时的详细报错,比如依赖注入失败、路由配置错误之类的。
    • IIS日志:在IIS管理器里找到你的站点,右键选「日志」,打开日志目录看最新条目,有没有500、404这类状态码,或者请求根本没到达应用的记录。
  • 补全并校验web.config配置
    你贴的web.config内容不全,正常的Core 2.0配置应该包含完整的aspNetCore节点,参考示例:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="dotnet" arguments=".\你的应用程序名.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
      </system.webServer>
    </configuration>
    

    重点检查:processPatharguments是不是正确指向你的dll文件,文件名和路径不能错;stdoutLogEnabled一定要设为true方便排查。

  • 直接在命令行启动应用验证
    打开服务器的命令提示符,进入站点部署目录,运行dotnet 你的应用程序名.dll,看看能不能正常启动,控制台有没有报错。如果命令行能正常启动但IIS不行,那就是IIS的权限或配置问题。

  • 检查站点权限
    IIS应用池的身份有没有访问站点目录的权限?比如用ApplicationPoolIdentity的话,要给站点目录添加IIS AppPool\你的应用池名称的读写权限,尤其是logs文件夹和本地数据库文件(如果用的是SQLite这类本地库)。

  • 核对路由配置
    数据库能初始化说明应用启动了一部分,但路由可能没配置对。去Startup.cs的Configure方法里看看,有没有加默认路由:

    app.UseMvc(routes => 
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
    

    如果默认的Home/Index控制器或动作不存在,就会返回空白页面。

  • 临时开启详细错误页面
    排查期间可以在Startup.cs里临时打开开发环境错误页面,哪怕是生产环境也能看到详细报错:

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        // 临时替换成下面的代码,排查完记得改回去
        app.UseDeveloperExceptionPage();
        // app.UseExceptionHandler("/Home/Error");
        // app.UseHsts();
    }
    

    重新发布部署后,页面应该会显示具体的错误信息了。

内容的提问来源于stack exchange,提问作者topcool

火山引擎 最新活动