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

ASP.NET Core MVC运行Unity WebGL文件报Unexpected token '<'如何解决

根因分析

这个报错的本质是浏览器请求Unity WebGL生成的.js、.wasm、.data等资源时,ASP.NET Core服务端没有返回对应静态文件,反而返回了HTML格式的错误页面(通常是404页面),浏览器尝试将HTML内容作为JS代码解析时,就会触发Unexpected token '<'语法错误。Unity本地build and run正常是因为Unity自带的Web服务器已经默认配置好了WebGL相关的资源规则。

解决方案
  • 配置ASP.NET Core静态文件的MIME类型映射
    ASP.NET Core默认没有注册WebGL相关后缀的MIME类型,需要修改启动文件配置,.NET 6+版本修改Program.cs如下:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

// 配置WebGL专属MIME类型
var contentTypeProvider = new FileExtensionContentTypeProvider();
// 基础WebGL资源类型
contentTypeProvider.Mappings[".data"] = "application/octet-stream";
contentTypeProvider.Mappings[".wasm"] = "application/wasm";
contentTypeProvider.Mappings[".symbols.json"] = "application/json";
// 若开启了gzip压缩需添加以下类型
contentTypeProvider.Mappings[".data.gz"] = "application/octet-stream";
contentTypeProvider.Mappings[".wasm.gz"] = "application/wasm";
contentTypeProvider.Mappings[".js.gz"] = "application/javascript";
// 若开启了Brotli压缩需添加以下类型
contentTypeProvider.Mappings[".data.br"] = "application/octet-stream";
contentTypeProvider.Mappings[".wasm.br"] = "application/wasm";
contentTypeProvider.Mappings[".js.br"] = "application/javascript";

// 应用自定义配置启用静态文件服务
app.UseStaticFiles(new StaticFileOptions
{
    ContentTypeProvider = contentTypeProvider,
    // 压缩资源需额外配置响应头告知浏览器解压规则
    OnPrepareResponse = ctx =>
    {
        if (ctx.File.Name.EndsWith(".gz"))
        {
            ctx.Context.Response.Headers.ContentEncoding = "gzip";
        }
        else if (ctx.File.Name.EndsWith(".br"))
        {
            ctx.Context.Response.Headers.ContentEncoding = "br";
        }
    }
});

// 保留原有其他中间件配置,注意静态文件服务必须放在路由、MVC中间件之前
app.UseRouting();
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();
  • 校验Unity构建产物的存放路径
    将Unity WebGL构建生成的所有文件(包含Build、TemplateData文件夹、index.html)完整放入ASP.NET Core项目的wwwroot目录下。如果将游戏内嵌到MVC视图中,需要保证视图内的资源引用路径和wwwroot下的文件结构完全匹配,例如产物放在wwwroot/MyWebGLGame目录下,js引用路径需对应修改为/MyWebGLGame/Build/xxxx.js。
  • 调整路由优先级避免资源请求被拦截
    确保UseStaticFiles中间件注册顺序在路由、MVC、SPA回退等中间件之前,避免WebGL的资源请求被业务路由拦截返回HTML错误页。
  • 精准排查错误
    若完成上述配置后仍报错,打开浏览器开发者工具的「网络」面板,找到触发报错的JS资源请求,查看返回内容与状态码,根据具体的404/500状态码进一步排查路径、权限相关问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 06:03:04