3

1つのプロジェクトでは、静的な.htmlページを生成する必要があります。このページは、同じサーバーで公開され、数百万人の訪問者に提供されます。

SQL Serverデータベースからデータを取得するac#コードからこれらのファイルの作成を自動化する必要があります。

プロジェクトはすでにC#asp.net MVC3を使用して開発されており、訪問者に提供するには、動的に生成されたページを同じURLの.htmlに保存する必要があります。

asp.net MVC3 /Razorを使用してこれらの.htmlページを生成する方法を考えていましたか?

Webキャッシングを使用したくない/使用する必要はありません。多くの理由で(ロード(毎日ロードされる数百万のページ)、これらの静的ページはCDNネットワークにキャッシュされ、元のサーバーが画像に表示されることなく、さらに高速にサービスを提供します。ページ数が多すぎます(同じページを何度も使用している場合にのみキャッシュが役立ちますが、100万を超えるページに頻繁にアクセスするため、頻繁に生成する必要があります)。

だから私は本当に何かを検索してHTMLページを生成します。

これを行う方法についてのアイデア...

4

4 に答える 4

2

まず、ルートがすべて静的htmlファイルとして複製できるURLを生成することを確認します。これにより、Html.ActionLinkを呼び出すと、使用できるURLが生成されます。

サイト全体を直接使用しているかのように生成し、外部にキャッシュします

Linuxでwgetのようなものを使用して、サイトのhtmlツリー全体を取得し、それらをコンテンツファイルと一緒に配置することができます。css、画像、javascriptなど。

その後、変更があった場合はサイトを再ダウンロードします。

于 2012-07-08T11:45:58.580 に答える
2

私の会社でも同様のことをしました。URLのリストを調べ、それらに対してhttp-requestを送信する別のプログラムがあります。結果を保存し、Webサーバーにコピーします。このように、ネットワークの内部にaspコードを含むWebサーバーが1つだけあり、インターネット上のサーバーには動的ページの静的コピーがあります。そして、私たちはそれからいくつかの素晴らしいパフォーマンスを得ることができます。

URLのリストを取得するには、必要な情報のクエリに使用できるキーをデータベースにクエリする特別なビュー/コントローラーを作成する必要があります。したがって、たとえばハンバーガーを表示するサイトがある場合、URLを作成するリストビューはハンバーガーテーブルにクエリを実行し、/ myburger?name=WopperタイプのURLの束を作成する可能性があります。次に、バッチプログラムがそれらのURLを読み取り、前述のようにhttp-requestを実行して、結果などを保存します。

于 2012-07-08T11:47:03.107 に答える
1

mvcビューとモデルに基づいてhtmlを生成する場合は、Razorを使用できます。これを使用してメールテンプレートを生成し、Razorを使用してモデルをビューに挿入しました。ビューからhtmlを生成し、目的に合っている場合は静的htmlファイルに書き込むことができます。NuGetのRazorEngineを参照すると、次のように使用できます。

var html = Razor.Parse(templateView, model);

さらにカスタマイズしたい場合は、このチュートリアルが役立つかもしれません。 http://www.west-wind.com/weblog/posts/2012/May/30/Rendering-ASPNET-MVC-Views-to-String

于 2012-07-09T05:26:20.330 に答える
0

私は常にMvcMailerの代わりに独自の電子メール生成方法を使用しています。まず、ビューまたはパーシャルから文字列を生成してから、<html>必要に応じて、などのhtmlタグを追加/削除する必要があります...次に、この文字列をファイルに書き込み、.htmlファイルとしてパスに保存します。

public static string HTMLToString(ControllerContext context, string viewName, object model)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = context.RouteData.GetRequiredString("action");

    var viewData = new ViewDataDictionary(model);

    using (var sw = new StringWriter())
    {
        var viewResult = ViewEngines.Engines.FindPartialView(context, viewName);
        var viewContext = new ViewContext(context, viewResult.View, viewData, new TempDataDictionary(), sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}
于 2017-03-23T23:57:07.983 に答える