3

私がやろうとしているのは、API をプロキシとして使用することです。それは Fiddler で動作し、アイデアがありました。

私は Web サイトを持っていて、別の Web サイトを iframe に表示したいと考えています。しかし、それを行うには「no-open」ヘッダーを削除する必要があります。

したがって、計画は次のとおりです。私のサイトから API に URL 文字列を送信すると、API はその URL にリクエストを送信し、応答を取得します。ページを保存せずに、いくつかのヘッダーを変更して Web サイトに応答します。

問題: json を返し続けます。HTML コードを文字列として返そうとしましたが、私の Web サイトはそれを iframe にレンダリングしません。

これは私のコードです。

 public class ProductsController : ApiController
{
    public HttpWebResponse GetProductsByCategory(string url, int edit)
    {            
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = WebRequestMethods.Http.Get;
        request.ContentType = "text/html";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        //
        if (edit == 1)
        {                              
            response.Headers.Set("Content-Disposition", "");
            response.Headers.Set("X-Download-Options", "");               
        }
        response.Headers.Set("Content-Type", "text/html");
        response.Headers.Set("APIflag", "Hi!");

        Stream theHTML = response.GetResponseStream();
        StreamReader objReader = new StreamReader(theHTML);
        string myHTML = objReader.ReadToEnd();

        System.Diagnostics.Debug.WriteLine("url was: "+url); //is OK
        System.Diagnostics.Debug.WriteLine("edit flag was: " +edit); //is OK
        System.Diagnostics.Debug.WriteLine(myHTML); //is OK

        return response;
    }
}
4

2 に答える 2

3

このように動作しました

 public class ProductsController : ApiController
{      
    public HttpResponseMessage GetProductsByCategory(string url)
    {          
        HttpResponseMessage theResponse = null;
        // init a wep api Client
        var myClient = new HttpClient();
        var theTask = myClient.GetAsync(url).ContinueWith((lamdaObj) =>
        {
            theResponse = lamdaObj.Result;
        });
        // wait for task to complete. Not really async, is it?!
        theTask.Wait();
        // remove annoying header 
        theResponse.Content.Headers.Remove("Content-Disposition");
        return theResponse;
    }
}

}

于 2013-03-12T09:42:27.073 に答える
0

ASP.netWebAPIを確認することをお勧めします。これは、 http: //wcf.codeplex.com/にあるWCFHTTPスタックを使用して行うことができます。ASP.netWebAPIに含まれています。http://www.asp.net/web-api

于 2013-03-08T18:31:22.870 に答える