【问题标题】:c# passing value from asp.net website to windows formsc#将值从asp.net网站传递到windows窗体
【发布时间】:2015-12-23 19:59:34
【问题描述】:

我已经创建了一个网站和一个 Windows 窗体应用程序,它们都连接到同一个 MySQL 数据库。 windows应用程序使用参数(用户名等)向网站发出POST请求。服务器(网站)生成一对RSA公钥和私钥。私钥存储在数据库中,公钥发送给客户端(windows应用程序)。问题是当我尝试发送公钥时,它没有被发送。它会发送其他信息,例如网页的 html 代码以及公钥,我在加密时收到错误“无效语法”(显然是因为 html 代码和公钥一起发送)。我如何只提取公钥并只发送那个给客户。但我得到了这个输出:http://postimg.org/image/8kwpnl6lp/

我做错了什么。如何才能将公钥作为服务器的响应。感谢艾米的帮助,谢谢

这是我的代码:

客户端(windows 应用程序:向服务器发出 post 请求):

public partial class Form1 : Form
{
    string Url = "http://localhost:8731/ckey.aspx"; //creates public key 
    string userName = Textbox1.TExt;
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
      string publicKey = getPublicKey(Url);
      richTextBox1.Text =publicKey ;          
    }
    public string getPublicKey(string url)
    {
        WebClient webClient = new WebClient();
        NameValueCollection formData = new NameValueCollection();
        formData["username"] = userName;            
        byte[] responseBytes = webClient.UploadValues(url, "POST", formData);          
        string responsefromserver = Encoding.UTF8.GetString(responseBytes);
        webClient.Dispose();          
        return responsefromserver;
    }
}

和服务器端代码(生成rsa密钥对并将公钥发送给客户端[ckey.aspx])

public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    string response = AssignNewKey();
    Response.Write(response); 
}

public string AssignNewKey()
{

    string username1 =Request.Form["username"];        
    RSA rsa1 = new RSACryptoServiceProvider(2048);
    string publicPrivateKeyXML = rsa1.ToXmlString(true);
    string publicOnlyKeyXML = rsa1.ToXmlString(false);        

    using (MySqlConnection myConn = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
    {
        string query = "INSERT INTO securelogin (PrivateKey,username)";
        query += " VALUES (@PrivateKey,@username)";
        MySqlCommand myCommand = new MySqlCommand(query, myConn);
        myCommand.Parameters.AddWithValue("@PrivateKey", publicPrivateKeyXML);
        myCommand.Parameters.AddWithValue("@username", username1);            
        myConn.Open();
        myCommand.ExecuteNonQuery();
        myConn.Close();           
    }
    return publicOnlyKeyXML;   
}

【问题讨论】:

  • 你返回了 publicOnlyKeyXML 但没有在调用方法中使用它的结果
  • 我没看懂你说什么,调用方法返回值后,是否应该在Page_load中使用Response.write?
  • 试过它仍然会发送其他信息,例如页面的 html 代码以及 rsa 公钥。
  • 如果您通过 Response.Write 传递响应,那么您应该考虑添加 Response.End/Close。否则它也会添加页面 HTML。我们发送/下载文件也是如此。
  • 只需在方法 Page_Load 中解释 - 你不想要任何东西而不是你的文本 protected void Page_Load(object sender, EventArgs e) { Response.Clear(); Response.Write("my supersecure public key"); Response.End(); }

标签: c# mysql asp.net post


【解决方案1】:

如果您通过Response.Write 传递响应,那么您应该考虑添加Response.End/Close。我们对send/download 文件做同样的事情。
否则它将渲染页面并添加页面 HTML。

【讨论】:

    【解决方案2】:

    您应该使用 WebService (.asmx) 之类的东西

    阅读本教程: http://www.tutorialspoint.com/asp.net/asp.net_web_services.htm

    【讨论】:

    • 没有一个答案可以帮助我解决我的问题... :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多