0

Web 应用程序是 .Net 4.0,是 Web Form 的一部分,MVC 的一部分。该站点不是直接访问样式,而是使用处理程序。这是真正的链接:

<link href="@Url.Content("~/Styles/CssManager.ashx?s=StyleSheetName")" rel="stylesheet" type="text/css" />
<link href="~/Styles/CssManager.ashx?s=StyleSheetName" rel="stylesheet" type="text/css" />

理想情况下,我想使用这个 URL:

<link href="@Url.Content("~/Styles/StyleSheetName.css")" rel="stylesheet" type="text/css" />
<link href="~/Styles/StyleSheetName.css" rel="stylesheet" type="text/css" />

主要原因是浏览器会捕获该页面。这可以通过向 RouteCollection 添加路由来完成,还是必须转到 IIS?我试图避免后者,因为这是我们向客户出售的 Intranet 应用程序,他们通常对这些东西知之甚少,所以我试图让他们尽可能简单。


Q1:我用一个动作来代替它吗?

A1:我没有想到,是不是一个选项?(我将示例更新为 Web 表单和 mvc。

4

1 回答 1

1

您可以创建自定义 IRouteHandler:

public class CssManagerHttpHandlerRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        CssManager handler = new CssManager();
        HttpContext.Current.Items["s"] = requestContext.RouteData.Values["s"];

        return handler;
    }
}

然后将其映射到您的 global.asax.cs 文件中:

routes.Add(new Route("Styles/StyleSheetName.css", 
            new RouteValueDictionary { { "s", "StyleSheetName" } },
            new CssManagerHttpHandlerRouteHandler()));

但是,您不能更改 HttpContext.Request.QueryString 或任何其他请求参数集合。因此,将争论从 RequestContext 传递到 HttpContext 最“清晰”的方法是使用 HttpContext.Current.Items 集合。这可能需要对您的 CssManager 处理程序类进行一些更改。

您可能还想看看这篇文章

于 2012-08-13T18:00:26.183 回答