2016-08-24 4 views
0

別のWebサイトからhtml応答を取得してアプリケーションに読み込む必要があります。私はコードの下に書かれ、ASP.net MVCで動的URLリダイレクトを行うには?

using System; 
    using System.Collections.Generic; 
    using System.IO; 
    using System.Linq; 
    using System.Net; 
    using System.Web; 
    using System.Web.Mvc; 

    namespace MVC_TEST.Controllers 
    { 
     public class DocumentCloudController : Controller 
     { 
      public string Index() 
      { 
       var result = GetResponse(); 
       return result; 
      } 

      private static string GetResponse() 
      { 

       var html = string.Empty; 
       const string url = @"http://localhost/xxxxx/yyyyy/logon.aspx"; 

       var request = (HttpWebRequest)WebRequest.Create(url); 
       request.AutomaticDecompression = DecompressionMethods.GZip; 
       using (var response = (HttpWebResponse)request.GetResponse()) 
       { 
        using (var stream = response.GetResponseStream()) 
        { 
         if (stream != null) 
         { 
          using (var reader = new StreamReader(stream)) 
          { 
           html = reader.ReadToEnd(); 
          } 
         } 
        } 
       } 


       return html; 
      }} 


     } 
    } 

コントロールが正しくロードされている、しかし、画像、CSSやJSパスがHTMLで

/xxxx/yyyy/dojo.js , 
    /xxxx/style/logon.css, 
    /xxxx/images/logon.png 

相対パスにマッピングされ、ここで私は以下のように実際のURLにそれを変更する必要があります

1つのオプションは、これらの内容をhtmlで置き換えることです。

URLを動的に変更するオプションはありますか? IIS URL書き換えモジュールは私の要件に適していますか?

仕事ができるIIS URL書き換えモジュールを使用して、あなたの考え

答えて

1

を共有するが、私は、クエリを実行し、DOMを操作するためHTML Agility PackまたはAngleSharpのようなHTMLパーサを使用することをお勧めしますしてください。

foreach (var link in document.DocumentNode.SelectNodes("//link[@href]")) 
{ 
    var orgHrefValue = link.GetAttributeValue("href", string.Empty); 
    var updHrefValue = string.Concat("[BASE URL]", GetAbsoluteUrlString(requestedUrl, orgHrefValue).AbsoluteUri); 
    link.SetAttributeValue("href", updHrefValue); 
} 

private static Uri GetAbsoluteUrlString(string baseUrl, string url) 
{ 
    var uri = new Uri(url, UriKind.RelativeOrAbsolute); 

    if (!uri.IsAbsoluteUri) 
     uri = new Uri(new Uri(baseUrl), uri); 

    return uri; 
} 
+0

おかげ@JesseJhonson:

次の例では、リバースプロキシを作成するときに私のために働いたスニペットです。しかし、私はjsファイルでいくつかのajax Webサービス呼び出しを持って、私もそれを置き換える必要があります。私は将来どのくらいのサービスコールが来るのか知りませんか?他の解決策はありますか? –

+0

リンクされたCSSファイルとJSスクリプトの絶対URLを置き換えるために、上記の同じ方法を使用しました。リバースプロキシを使用してみましたか? [Titanium-Web-Proxy](https://github.com/justcoding121/Titanium-Web-Proxy)のようなものはプロセスを単純化するかもしれません。基本的にHTMLを解析して、すべてのURLを置き換えて、リバースプロキシを指すようにします(mydomain.com/proxy.ashx?uri={original urlなど)。このようにして、すべての外部ファイル(js、cssなど)がプロキシ経由で読み込まれ、コンテンツの取得、解析、変更、およびHTMLと同じ方法での配信が可能です。 –

関連する問題