2014-04-24 27 views
0

我需要发送类似于使用WebBrowser.Navigate(从Windows窗体)的请求,但是,我想使用iframe而不是Windows窗体组件。如何在asp.net中模拟Webbrowser.Navigate webforms

我正在尝试使用WebRequest和WebResponse,但我遇到了一些问题以获得响应。我正在实施来自巴西SERASA的综合支票。使用Windows窗体,没关系。

Windows窗体:

String postData = string.Format("keyIntegracao={0}&key={1}&cnpj={2}&produto=  {3}&documento={4}&uf={5}", keyIntegrador, key, cnpj, produto, documento, uf); 

    System.Text.Encoding enconding = System.Text.Encoding.UTF8; 
     byte[] bytePD = enconding.GetBytes(postData); 

    string username = "user"; 
    string password = "pass"; 
    string url = String.Format("https://{0}:{1}@url.com.br/consulta/createRequest", username, password); 

// Abertura do Componente WebBrowser 

    webBrowser1.Navigate(url, "", bytePD, "Content-type: application/x-www-form-urlencoded"); 

现在,在web表单,我想:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 

SetBasicAuthHeader(request, username, password); 

request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 
request.ContentLength = bytePD.Length; 

Stream dataStream = request.GetRequestStream();    
dataStream.Write(bytePD, 0, bytePD.Length);   
dataStream.Close(); 

HttpWebResponse response = (HttpWebResponse)request.GetResponse();      

dataStream = response.GetResponseStream();  

StreamReader reader = new StreamReader(dataStream); 

string saida = reader.ReadToEnd().ToString(); 

frame.Attributes.Add("src", response.ResponseUri.AbsoluteUri); 


    reader.Close(); 
    dataStream.Close(); 
    response.Close(); 

方法

public void SetBasicAuthHeader(WebRequest request, String userName, String userPassword) 
{ 
    string authInfo = userName + ":" + userPassword; 
    authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)); 
    request.Headers["Authorization"] = "Basic " + authInfo; 
} 

要重定向到一个iframe的反应,我使用url“response.ResponseUri.AbsoluteUri”,但它不会按原样显示响应。使用Windows窗体,它工作正常。

我该如何模拟Webbrowser.Navigate,使用webforms?

谢谢你们!

回答

0

你正在与苹果混合坚果。

在桌面上,您应该以某种方式(cookie,查询字符串等)将身份验证传递给webbrowser,但是当您将url从ASP.net内置到iFrame中时,您在服务器上执行了身份验证,将不会被认证。

如果您希望他进行日志记录或找到将该身份验证传播到客户端的方法,您应该在客户端执行身份验证过程。

+0

对不起,我从来没有做过。你的意思是当我收到来自请求的答案(答复)时我应该进行认证过程?或者当我发送postData? – Guilherme

+0

你不能在你的服务器进行身份验证(asp .net代码隐藏),并期望知道在哪里进行身份验证的客户端。或者你在客户端进行身份验证(javascript),或者你找到一个机制向客户端传播一个会话(根据具体情况这将证明真的很难) – Gusman