2011-07-28 11 views
0

パスを別のドメインにマップできますが、アドレスバーに元のアドレスを保持したいと考えています。これをコード化する方法はありますか、それはIISにありますか?可能であれば、コード化された方法が好きです。別のドメインへのパスのマップ

私はhrefが "http://www.example.com/invproxy.aspx?id=1 & batch = 1"のようなリンクを持っています。 私はそのマップを "http://www.otherdomain.com/Files/TheFileRequest.aspx"にしたいと思います。

元のリクエストのクエリ文字列を使用してマップするパスを生成します。それはServer.TransferまたはResponse.Redirectで動作しますが、私はアドレスバーに依然として最初に要求されたURLを言うことを望みます。これは可能ですか?

おかげ

編集:私は問題が(おそらく最も経済的な方法を)解決したが、以下に、私はinvproxy.aspx

// Just test file, no code to select path yet. 
string requestPath = "http://www.otherdomain.com/Files/TestFile.pdf"; 

// Setup the request for the PDF File 
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(requestPath); 

// Get the response from otherdomain.com 
HttpWebResponse resp = (HttpWebResponse)req.GetResponse(); 

// Assign the invproxy response the PDF ContentType 
Response.ContentType = "application/pdf"; 

// Get the body of the response in a stream object 
Stream s = resp.GetResponseStream(); 

// Create a byte array to be read into from the stream 
byte[] buffer = new byte[resp.ContentLength]; 

int position = 0; 
while (true) 
{ 
    //Read bytes one by one, slow but causes errors trying to read the whole thing. 
    //I need to use chunks here. 
    int b = s.ReadByte(); 
    if (b == -1) 
    { 
     //This is the end of the stream 
     break; 
    } 
    else 
    { 
     //Set the byte at the current position to the value just read 
     buffer[position] = (byte)b; 

     //Advance the position by one. 
     position++; 
    } 
} 
//breakpoint debugging 
string sa = Encoding.Default.GetString(buffer); 

//Write the file to the invproxy response. 
Response.BinaryWrite(buffer); 

EDITのPage_Loadイベントで使用していたコードでいる:だけ完成した結果を追加するには、私のPDF文書をブラウザの新しいタブに表示します(互換性がある場合)。アドレスバーはhttp://www.example.com/invproxy?myquerystringです。

+0

必要に応じて現在のURLにクエリ文字列パラメータと値を取得する方法をあなたに示すことotherdomain.comで生活してい同じサーバーか、そうでなければそれを制御していますか? –

+0

はい、両方とも自分のVPSで動作しており、私は両方を制御しています。 –

+0

私はおそらくあなたがしようとしていることを100%理解していませんでしたが、そのテクニックは現在のURLの部分を与えるべきです – MacGyver

答えて

1

上記の回答に基づいて、IFrameをロードすることをお勧めします。ページtあなたが実際にエンドユーザーに見せたいURLのページの内側に欲しいと思っています。これには、含まれるページの複雑さに応じてノックオン効果があることに注意してください。

+0

それで、ちょっと複雑にすると、 PDF文書になります。 PDFビューアが組み込まれていないブラウザでは、ページ内で開くのではなく、ファイルをダウンロードするだけで問題になることはありません。しかし、それをサポートするブラウザでは、私はPDFを表示したいが、上記のURLを持っている。自分のリンクにtarget = "_ blank"を使用しているので、新しいタブが常に開かれます。 –

+0

それでも動作するはずですが、それだけで達成しようとしている場合は、コンテンツタイプをapplication/pdfに変更し、PDFバイトをレスポンスにストリームすることができます。ストリーミングの方法に関するリンクは次のとおりです:http://support.microsoft.com/kb/306654 –

+1

PDFは、一般的に3通りの方法でユーザーに提供できます。PDFViewer.aspxを使用します。 * .pdf拡張子を持つHTTPハンドラを使用してファイル自体を提供するか、オブジェクトにPDFViewerを埋め込みます(厳密なHTML(OR iframe - transitional HTML))。if ifあなたはいくつかの例が必要ですが、VB.NETにあります。C#でコードを手軽に入手できるツールがありますが、 – MacGyver

0

これを試してみてください:

string newParamName = "QueryParam"; 
string newParamValue = HttpUtility.UrlEncode(Request.QueryString("queryValue").ToString()); 
Uri uri = HttpContext.Current.Request.Url; 
string url = uri.Scheme + "://" + "www.otherdomain.com" + "/Files/TheFileRequest.aspx" + "?" + newParamName + "=" + newParamValue; 
HttpContext.Current.Response.Redirect(url); 

..あなたはそれがより洗練されたことができます。..ちょうど