这个问题启发了我做一些测试,看看我是否能以某种方式让请求的语法起作用。
结果是相对容易的。在几个不同的测试版本之后,这就是我最终要做的。
配置
- 创建一个全新的 Web 应用程序进行测试
- 创建一个文件夹,称为
DynCss
放置需要动态处理的 css 文件的文件夹
注册.css
要由页面处理程序处理的文件以处理对该文件夹的请求。为此,我将以下内容添加到web.config
:
<configuration>
<system.web>
...
<httpHandlers>
<add type="System.Web.UI.PageHandlerFactory" path="/DynCss/*.css" verb="GET"/>
</httpHandlers>
...
</system.web>
</configuration>
为文件注册一个构建处理程序.css
:
<configuration>
<system.web>
...
<compilation debug="true" targetFramework="4.0">
<buildProviders>
<add extension=".css" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
...
</system.web>
</configuration>
完成这些更改后,我可以继续对其进行测试。
测试
出于测试的目的,我添加DynamicStyles.css
到DynCss
文件夹中。内容DynamicStyles.css
:
<%@ Page Title="DynamicStyles.css" Language="C#" AutoEventWireup="true" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType="text/css";
Response.Cache.SetCacheability(HttpCacheability.Public);
}
</script>
body {
font-weight: <%= TestDynamicCss.Code.Constants.FontWeight %>;
}
注意:TestDynamicCss.Code.Constants.FontWeight
引用静态类上的静态属性。我只是返回字符串“粗体”。
最后,我链接到它Default.aspx
:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="TestDynamicCss._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<link href="/DynCss/DynamicStyles.css" rel="Stylesheet" type="text/css" />
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
Welcome to ASP.NET! Is this now bold? Why yes, it is!
</h2>
</asp:Content>
注释
使用这种方法,您可以获得您要求的行为。缺点是您不会像处理静态 css 文件那样获得任何自动缓存处理。此外,这种方法(据我所知)无法使用 Asp.Net 4.5 的 Css 捆绑功能。此外(不用说)在 Css 文件中编码时,您不会获得 C# 智能感知。