2012-08-13 131 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

相關問題