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

ASP.NET Core MVC中Edit Action被重复调用且出现scss.map异常请求

问题根源与解决方案

问题本质

这和Entity Framework完全无关,是静态资源路径错误引发的路由误匹配:

  1. 当你访问Edit页面时,当前URL为/EFController/Edit/{id},浏览器加载CSS后会自动尝试请求对应的Source Map文件(site.scss.map)。
  2. 由于CSS引用使用相对路径逻辑,浏览器会以当前页面URL为基准,发起/EFController/Edit/site.scss.map的请求,而这个路径刚好命中了MVC默认路由规则({controller}/{action}/{id?})。
  3. 此时site.scss.map被当作Edit action的id参数传入,但该值与NoteRecord模型的Id类型不匹配,直接导致ModelState无效,同时出现第二次调用的异常现象。

解决方案

1. 修正CSS引用为绝对路径

确保_Layout.cshtml中的CSS引用基于站点根目录,避免相对路径歧义:

<link rel="stylesheet" href="~/@Manifest["scss/site.scss"]!.File" asp-append-version="true" />

注意:需确认Manifest生成的File值为绝对路径格式(如css/site.[hash].css),而非相对路径。

2. 配置Vite生成正确的Source Map路径

在vite.config.ts中设置Source Map的绝对路径引用,让浏览器从站点根目录请求map文件:

export default defineConfig(async () => {
    const config: UserConfig = {
        build: {
            sourcemap: true,
            rollupOptions: {
                input: ['Client/main.ts', "Client/scss/site.scss"],
                output: {
                    assetFileNames: 'css/[name].[hash].css',
                    sourcemapPathTransform: (relativePath) => {
                        return `/css/${relativePath}`;
                    }
                }
            }
        }
    };
    return config;
});

3. 确保静态资源中间件优先处理

在Program.cs中,将静态资源中间件注册在路由中间件之前,让静态资源请求优先被处理,不会落入控制器路由:

app.UseStaticFiles(); // 先处理静态资源

app.UseRouting();
// 其他中间件...
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

4. 可选:限制Edit action的参数类型

在EFController的Edit方法中明确参数类型,避免非预期的字符串传入:

public IActionResult Edit(int id)
{
    // 你的业务代码
}

这样当请求传入site.scss.map这类非数值时,会直接返回404,不会进入action触发ModelState错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:07:17