首页 > 解决方案 > WebMarkupMin + Razor + React:无法将标记缩小应用于以“gzip”格式编码的文本内容

问题描述

我在“带有 React.js 的 ASP.NET Core”项目中混合使用 React.js SPA 生成页面和 Razor 视图。

在实现 WebMarkupMin 时,运行时出现以下异常:

处理请求时发生未处理的异常。

InvalidOperationException:无法将标记缩小应用于以“gzip”格式编码的文本内容。

异常截图

为什么会发生这种情况,我该如何预防?

标签: c#asp.netreactjs.net-5

解决方案


发生异常是因为 WebMarkupMin 正在尝试缩小已经压缩的数据。

该页面已被 Node.Js('npm start')压缩。

要解决这个问题,您可以从 WebMarkupMin 中排除您的 React.js SPA URL,如下所示:

var reactUrls = new List<IUrlMatcher>(){ new ExactUrlMatcher("/")};
services.AddWebMarkupMin()
            .AddHtmlMinification(options => options.ExcludedPages = reactUrls)
            .AddHttpCompression(options => options.ExcludedPages = reactUrls);

为了将您的 React.js 路由指向 ASP.NET 托管的 Razor 视图(由 WebMarkupMin 处理),您可以执行以下操作:

render() {
    const reload = () => window.location.reload();
    return (
        <Switch>
            <Route exact path='/razor' onEnter={reload} />
            <Route exact path='/mvc' onEnter={reload} />
            <Route exact path='/' component={HomePage} />                   
            <Route component={NotFoundPage} />
            <Route path='' onEnter={reload} />
        </Switch>           
    );

推荐阅读