2012-08-13 86 views
0

Web应用程序是.Net 4.0,是Web Form的一部分,属于MVC。网站不是直接访问样式,而是使用处理程序。这里是真正的链接:如何最好地实现ASP.Net路由到处理程序?

<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" /> 

理想我想使用这个网址:

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

的主要原因是为了让浏览器将捕捉页面。这可以通过添加一个路由到RouteCollection来完成,或者一个人去IIS吗?我试图避免后来,因为这是一个内部网应用程序,我们卖给我们的客户,他们通常对这个东西知之甚少,所以我正在尽量保持它对他们来说尽可能简单。


问题1:我是否将其替换为一个动作?

A1:我没有想到,这是一个选项吗? (我更新的例子是既Web Forms和MVC

+1

你可以使用MVC操作替换ASHX吗? – SLaks 2012-08-13 16:57:11

回答

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或任何其他的request-params集合,所以从RequestContext到HttpContext的最简单的方法就是使用HttpContext.Current.Items集合,这可能需要你的CssManager处理器做一些修改类。

您可能也想看到this article

相关问题