0

私は、単に WebClient の ContentResult を返す関数を持つ ASP.NET コントローラーを持っています。

この場合、CNN は私のテストベッドであり、私の WebClient であり、CNN を文字列としてそのコンテンツにダウンロードし、コントローラーの ActionResult/ContentResult として結果を返します。

このアクションで RenderPartial を呼び出して、CNN が現在のコンテンツの「下」および右側の独自のボックスに表示されるようにします。

私が直面している問題は、CNN のリンクをクリックすると、「相対」URL にリダイレクトされることがあり、その相対 URL がローカルホストに存在せず、Web サーバーにも存在しないことです。したがって、リンクは失敗します。

結果のページが私の.NETシェルを「置き換える」ため、絶対URLにリダイレクトする場合も問題です。

私がする必要があるのは、返された ContentResult 内にあるすべての URL を取得し、それらの URL のいずれかがクリックされた場合は、それらを .NET アプリケーションに戻し、WebClient によってダウンロードされ、そのシェルでレンダリングされることです。 .

WebClient の代わりに IFRAME を使用してこれを行うことができることは承知していますが、私の場合、使用しているパブリック API によって制限されているため、IFRAME は不可能です。また、一部のクライアント マシンでブロックされていますが、これは制御できません。

また、クライアント マシンはネットワークから切り離されるため、XSS となる AJAX ロードを使用できません。

私が考えることができる1つのアイデアは、基本的に、フィルター/ルールを使用してカスタムルートを作成し、「CNN」のようなリンクを探して、コントローラーにパラメーターとして渡すことです。次に、コントローラーにページをレンダリングさせ、それらのリンクを Web クライアントに渡します。

これは明らかに大変な作業であり、ルーティング エンジンのどこから始めればよいかさえわかりません。

私が考えることができる他の唯一のことは、有効なリンクを指しているかどうかを確認することによって、URL の有効性を確認することです。有効なリンクを指していない場合は、CNN の URL プレフィックスを追加し、それが有効なリンクかどうかを確認します。しかし、CNN のようなページの各リンクをチェックするのは非常にコストがかかる可能性があるため、パフォーマンスに大きな影響を与えるソリューションの場合、それは大変な作業のように思えます。また、各リンクを 2 回実行するので、POST 操作が必要な場合に問題になります。これは、基本的に各操作を 2 回実行するためであり、これはパブリック API であるため、パブリック フレームワークから消費しています。 、それを防ぐためにソースコードを制御することはできません。

他の提案はありますか?私がやろうとしていることを簡単に達成する方法はありますか?

4

0 に答える 0