在HTML4.6.2中,我有一个helper,如下所示:
public static MvcHtmlString JsMinify(this HtmlHelper helper, Func<object, object> markup, bool shouldMinify)
{
string notMinifiedJs = (markup.DynamicInvoke(helper.ViewContext) ?? "").ToString();
var minifier = new Minifier();
var minifiedJs = minifier.MinifyJavaScript(notMinifiedJs, new CodeSettings
{
EvalTreatment = EvalTreatment.MakeImmediateSafe,
PreserveImportantComments = false
});
return new MvcHtmlString(minifiedJs);
}它是这样使用的:
@Html.JsMinify(@<text>
// some cool javascript here
</text>)在.NET Core3.1中,我试图重新创建一个类似的助手:
public static IHtmlContent JsMinify(this IHtmlHelper helper, Func<object, object> markup)
{
var resultTemplate = markup.DynamicInvoke(helper.ViewContext);
var notMinifiedStr = (resultTemplate ?? string.Empty).ToString();
var minifiedStr = Uglify.Js(notMinifiedStr, UglifyCodeSettings);
return new HtmlString(minifiedStr.Code);
}但是,它不能正常工作。调试这个,我可以看到notMinifiedStr值是一个字符串"Microsoft.AspNetCore.Mvc.Razor.HelperResult“,这是完全错误的。我不太确定.NET内核在这里有什么不同。
任何想法都值得赞赏。
发布于 2020-10-13 07:59:35
最后,我像这样使用了TagHelpers:
public class ScriptTagHelper : TagHelper
{
private static readonly CodeSettings UglifyCodeSettings = new CodeSettings { PreserveImportantComments = false, EvalTreatment = EvalTreatment.MakeImmediateSafe, MinifyCode = true };
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
if (output == null)
{
throw new ArgumentNullException(nameof(output));
}
var js = (await output.GetChildContentAsync()).GetContent();
if (!string.IsNullOrWhiteSpace(js))
{
var minifiedStr = Uglify.Js(js, UglifyCodeSettings);
output.Content.SetHtmlContent(minifiedStr.Code);
}
}
}然后简单地在我需要处理的cshtml文件的顶部添加这一行:
@addTagHelper *, InsertYourAssemblyNameHerehttps://stackoverflow.com/questions/64329323
复制相似问题