0

Web ページ内にビューを作成しようとしていますが、取得しようとしていない でHtml.ActionLinkのみ機能します。ControllerView

toを URL にHtml.ActionLink使用して使用しようとしましたが、 inner を変更する代わりにページをリダイレクトします。ControllerRedirectView

 <li>@Html.ActionLink("MyExtPage", "MyExtPage", "Home")</li>

 public ActionResult MyExtPage() {
      return Redirect("http://my.url/");
 }

作成されたビューを使用すると、ビューを返すことができますが、外部で提供される Web ページを返したい場合はどうすればよいでしょうか? 必要がなければ、本当に使いたくありませframesん。

 public ActionResult Index() {
      ViewBag.Title = "Home";
      return View();
 }

上記はファイルがあるため機能しますが、たとえばビューとしてIndex.cshtml挿入したい場合はどうなりますか?http://google.com

4

3 に答える 3

1

上記は Index.cshtml ファイルがあるため機能しますが、たとえば、http: //google.comをビューとして挿入したい場合はどうすればよいでしょうか?

このリモート ロケーションのコンテンツをダウンロードし (たとえば WebClient クラスなどの HTTP クライアントを使用)、それをコンテンツの結果として返すことができます。例えば:

たとえば、ジョブを実行するカスタム ビューの結果を作成できます。

public class RemoteViewResult : ActionResult
{
    private readonly Uri uri;
    public RemoteViewResult(Uri uri)
    {
        this.uri = uri;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        using (var client = new WebClient())
        {
            using (var stream = client.OpenRead(this.uri))
            {
                var response = context.RequestContext.HttpContext.Response; 
                stream.CopyTo(response.OutputStream);
                response.ContentType = client.ResponseHeaders[HttpResponseHeader.ContentType];
            }
        }
    }
}

その後:

public ActionResult Index()
{
    return new RemoteViewResult(new Uri("http://www.google.com"));
}
于 2013-06-17T15:05:13.663 に答える
1

私の知る限り、そのようにすることはできません。ビューは、Web サイトの適切なビューである必要があります。フレームを使用して外部ページのコンテンツを表示したくない場合は、WebRequest を使用して Html をモデル/ViewBag にプルバックし、それをローカル ビューにレンダリングすることができます。

これには多くの潜在的な問題があります.生のhtmlをページにレンダリングする必要があり、外部サイトからのXSS攻撃にさらされる可能性があります. また、外部ページがタイムリーに応答せず、外部サイトからのセッション制御が失われた場合、タイムアウトが発生する可能性があり、すべての要求が同じエンド ユーザーからのものとして認識されます。

于 2013-06-17T15:05:26.897 に答える
0

しかし、たとえば、 http: //google.com [in] ビューに挿入したい場合はどうすればよいでしょうか。

を使用して表示するか<iframe />、WebClient を使用して HTML サーバーサイドをプルし、それをビューに書き込むことで表示できます。どちらも奨励されていません。

于 2013-06-17T15:04:49.000 に答える