You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.2升级至.NET 6.0后自定义JS抛出TypeError问题求助

.NET 6.0部署IIS后DevExtreme JS错误排查与解决

可能原因

  • 序列化行为差异:.NET 6默认使用System.Text.Json,而.NET Core 2.2默认用Newtonsoft.Json,两者在空值处理、属性命名策略上有明显区别。如果后端返回的JSON字段缺失或为null,前端DevExtreme 20.2.6组件处理时就可能在调用toLowerCase()时遇到undefined值。
  • IIS静态文件加载异常:.NET 6的ASP.NET Core模块对静态文件的缓存、加载逻辑和旧版本不同,可能导致自定义internal.js加载时机错误,依赖的对象未初始化就被调用。
  • DevExtreme版本兼容性:20.2.6版本的DevExtreme未完全适配.NET 6的后端输出格式,对新序列化返回的JSON解析存在逻辑漏洞。

解决办法

  • 切换回Newtonsoft.Json序列化
    安装Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet包,在Program.cs中配置与旧版本一致的序列化规则:

    builder.Services.AddControllersWithViews().AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
        options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
    });
    

    确保后端返回的JSON结构和.NET Core 2.2版本完全兼容。

  • 调整IIS静态文件配置

    • 确认IIS站点已启用静态文件功能,自定义internal.js的路径正确,未被IIS拦截。
    • 在Program.cs中禁用静态文件缓存,避免旧缓存导致的加载异常:
      app.UseStaticFiles(new StaticFileOptions
      {
          OnPrepareResponse = ctx =>
          {
              ctx.Context.Response.Headers.Append("Cache-Control", "no-cache, no-store, must-revalidate");
              ctx.Context.Response.Headers.Append("Expires", "0");
          }
      });
      
  • 修复自定义internal.js逻辑
    定位报错的toLowerCase()调用位置,添加空值判断,避免undefined调用方法:

    // 原错误代码示例:
    // const processedValue = targetObj.field.toLowerCase();
    // 修改后:
    const processedValue = targetObj?.field?.toLowerCase() || '';
    

    同时确保相关逻辑在DevExtreme组件数据加载完成后再执行。

  • 升级DevExtreme版本
    考虑升级到21.2及以上版本的DevExtreme,官方后续版本修复了与.NET 6的兼容性问题,能更好适配新环境。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:30:01