IT序号网

css之动态 CSS之错误的内容类型

sharpest 2023年08月02日 编程语言 19 0

我需要为我的应用程序中的每个用户添加可自定义的界面。所以在谷歌搜索之后我决定生成 css,为每个用户缓存它并在 View 中链接它。我找到了 good post并以此为例。

所以我的应用程序产生了一些结果代码:

在 Controller shedule_themes_controller.rb 中:

... 
def get_css 
  respond_to do |format| 
    format.css { render :text => "body {\n background-color: blue; \n}", :content_type => Mime::CSS } 
  end 
end 

布局中:

... 
<%= stylesheet_link_tag    "application" %> 
<link href="<%= get_css_path %>" media="screen" rel="stylesheet" type="text/css" /> 

但是当我启动应用程序时,CSS 没有加载。它来自 406 Not Acceptable 错误。响应 header 是:

Cache-Control:no-cache, private 
Connection:Keep-Alive 
Content-Length:1 
Content-Type:text/html; charset=utf-8 

如您所见,响应具有内容/类型text/html,因此 406 错误是。

谁能解释一下,如果请求内容类型是 text/css,为什么 Controller 会用 text/html 响应?

附言我尝试使用 Google Chrome DEV HTTP CLIENT 手动向 localhost:3000/get_css 发送请求。我设置了 Content-Type: text/css 并且服务器响应了正确的 css 和 content-type:

body { 
  background-color: blue;  
} 

所以我可能在布局中链接动态 CSS 时犯了一些错误?

谢谢!

请您参考如下方法:

问题似乎出在请求的 url 中。 <%= get_css_path %>将返回 /get_css因此 Controller 操作通过 format.html 处理此请求部分。所以你可以尝试将格式附加到 url 中:

<link href="<%= get_css_path(:format => :css) %>" media="screen" rel="stylesheet" type="text/css" /> 

这将请求 /get_css.css因此该操作将处理 format.css 部分。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!