0

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 にアクセスする必要がありますか? これは私たちが顧客に販売するイントラネット アプリケーションであるため、後者を避けようとしています。顧客はこのことについてほとんど知らないことが多いため、できるだけシンプルに保つようにしています。


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 やその他の request-params コレクションは変更できません。したがって、RequestContext から HttpContext に引数を渡す最も「明確な」方法は、HttpContext.Current.Items コレクションを使用することです。これには、CssManager ハンドラー クラスにいくつかの変更が必要になる場合があります。

この記事もご覧ください。

于 2012-08-13T18:00:26.183 に答える