【问题标题】:How best to implement ASP.Net routing to handler?如何最好地实现 ASP.Net 路由到处理程序?
【发布时间】:2012-08-09 22:43:06
【问题描述】:

Web 应用程序是 .Net 4.0,它是 Web 窗体的一部分,也是 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。

【问题讨论】:

  • 你能用 MVC 动作替换 ASHX 吗?

标签: c# asp.net url asp.net-mvc-routing url-routing


【解决方案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 处理程序类进行一些更改。

您可能还想查看this article

【讨论】:

    猜你喜欢
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2011-10-14
    • 2021-06-16
    • 2018-03-08
    • 2021-03-07
    相关资源
    最近更新 更多