在默认浏览器中打开网站并将其传递给POST数据

时间:2015-07-01 13:45:55

标签: javascript c# asp.net post browser

想象一下“客户端 - 服务器”应用程序。有2个不同的客户端可以登录到数据库,一个是标准的Windows应用程序,一个是Web应用程序。大多数功能都可以从两个客户端获得,但某些功能只能从Web客户端获得。

所以现在如果用户正在使用Windows客户端并且他需要在Web客户端中执行某些操作,他需要打开他的默认浏览器,打开正确的URL以进入登录页面,输入正确的用户名和密码登录后,他可以继续他的工作。好用户有点懒,所以他们提出要求让它变得更容易,他们想要在Windows应用程序中添加一些内容 - 类似于可点击的按钮,以便在点击它之后打开他们的默认Web浏览器并自动登录(我在Windows应用程序中有登录数据。

对于新手来说这是一个不错的任务:)我找到了很多方法如何创建POST请求并将它们发送到服务器或如何打开默认浏览器,但没有关于如何打开浏览器并发送给我的POST请求。

所以我有了一个想法 - 我在用户的临时文件夹中“动态”创建了一个临时html文件(我最后将其删除),该文件只包含一个将自动提交的表单。

public void CreateFormFile(string url, string userName, string password)
{
  using (StreamWriter sw = new StreamWriter(FormFileName))
    {
      sw.WriteLine("<html>");
      sw.WriteLine("<form id=\"frmRedirect\" action=\""+url+"\" method=\"post\">");
      sw.WriteLine("<input type=\"text\" name=\"userName\" id=\"userName\" value=\"" + userName + "\">");
      sw.WriteLine("<input type=\"text\" name=\"password\" id=\"password\" value=\"" + password+ "\">");
      //sw.WriteLine("<input type=\"submit\" name=\"submit\" value=\"submit\" id=\"submit\">");
      sw.WriteLine("<script type=\"text/javascript\">");
      sw.WriteLine("document.getElementById(\"frmRedirect\").submit();");
      sw.WriteLine("</script>");
      sw.WriteLine("</form>");
      sw.WriteLine("</html>");
    }
  }

然后在主程序中我只需要调用

CreateFormFile(config.URL, config.UserName, config.Password);
Process.Start(FormFileName); //FormFileName is a string property containing the full path to the temp file

问题是它在“另一方面”不起作用。

我在服务器上创建了一个测试aspx

protected void Page_Load(object sender, EventArgs e)
  {
    string userName = HttpContext.Current.Request["userName"];
    string password = HttpContext.Current.Request["password"];
    Response.Write("userName = " + userName);
    Response.Write("<br>password = " + password);
  }

所以现在,当我点击按钮时,我的浏览器打开,它被正确地重定向到正确的页面,但页面只返回

userName = 
password =

意味着值为空。当我调试它时,我发现Request.HttpMethods实际上是“GET”而不是“POST”,而Request.InputStream是空的(Length == 0)。

知道我做错了什么吗?我在localhost上测试它是否重要。谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

我不知道你有什么类型的数据库,但是这样的......

当您使用正确的用户和密码登录(webapp或不使用)时,服务器会生成一个随机哈希,如(gbiaw783y98hdq98dgqod9pawhd),并将其存储为数据库中的某个会话,仅适用于该用户。此外,当您在Windows应用程序中登录时,为您返回此哈希。您将此字符串存储在应用程序的某个变量中,当用户单击该按钮时,它会打开您在GET方法上提供哈希的URL。然后,服务器将您发送的哈希值与数据库中的哈希值进行比较,如果等于用户的日志,则不会仅回显一些登录错误。

对不起,如果我不够清楚