3

我想做的-我猜-是使用API​​作为代理。它与 Fiddler 合作,并且有了这个想法。

我有一个网站,希望在 iframe 中显示另一个网站。但我需要删除“禁止打开”标题才能做到这一点。

所以计划是:从我的站点向 API 发送一个 url 字符串,API 向该 url 发出请求,获取响应,并且不保存页面只是更改一些标题并响应我的网站。

问题:它一直返回一个 json。我试图将 html 代码作为字符串返回,但是我的网站不会将它呈现到 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.net web api。您可以使用位于http://wcf.codeplex.com/的 WCF HTTP 堆栈来执行此操作。它已包含在 ASP.net web api 中。http://www.asp.net/web-api

于 2013-03-08T18:31:22.870 回答