POST-данные где-то теряются - PullRequest
0 голосов
/ 12 ноября 2008

UPDATE

Таким образом, оказывается, что мертвая хватка интернет-взломщика на "безопасности", чтобы "наверстать" то, что он так плохо в безопасности, вызывал мои проблемы. Я должен был проверить это сначала, ха-ха. Спасибо всем за вклад, он дал мне идеи по оптимизации моего приложения: D


Я пишу веб-приложение (в ASP.NET 3.5), которое интегрируется с приложением платформы. Приложение платформы берет учетные данные пользователя и помещает их в «пустую» HTML-страницу, которая состоит из формы со скрытыми элементами, содержащими указанные учетные данные и ПОСТЫ, для веб-приложения (default.aspx):

<HTML>
<HEAD>
<SCRIPT LANGUAGE=JSCRIPT>
    function OnLoad(){
        try {
            document.form1.submit();
        }
        catch(e){
        }
    }
</SCRIPT>
</HEAD>
<BODY OnLoad="OnLoad()">
    <FORM ACTION="http://localhost:51816/gs_ontheweb/default.aspx" METHOD=POST NAME=form1 TARGET="_NEW">
    <INPUT TYPE="HIDDEN" NAME="ClientID" VALUE="123456">
    <INPUT TYPE="HIDDEN" NAME="Password" VALUE="2830088828">
    <INPUT TYPE="HIDDEN" NAME="PracType" VALUE="051">
    <INPUT TYPE="HIDDEN" NAME="Encrypt" VALUE="12345620081111">
</FORM>
</BODY>
</HTML>

Когда моя страница default.aspx загружается, она вызывает следующую функцию:

Dim ClientID As String = Request.Form("ClientID")
Dim PassWord As String = Request.Form("Password")
Dim PracType As String = Request.Form("PracType")

Каждый из них приводит к пустым строкам. Любые идеи о том, почему это происходит? Заранее спасибо.

РЕДАКТИРОВАТЬ: Есть ли что-то, что мне нужно настроить в моем файле web.config, чтобы это работало правильно? Request.Params ("<param name>") не работает.

Ответы [ 3 ]

3 голосов
/ 13 ноября 2008

Ваша проблема - это свойство "Target" в форме. Почему это здесь?

(я также позволил себе немного почистить ваш HTML)

<html>
    <head>
    <title>Test JS Post</title>
    <script type="text/javascript" language="javascript">
    <!--
        function OnLoad(){
            try
            {
                alert("Posting...");
                document.form1.submit();
            }
            catch(e)
            {
                alert("ERROR!");
                alert(e);
            }
        }
    //-->
    </script>
</head>
<body onload="OnLoad()">

    <form action="http://localhost:49684/Default.aspx" method="post" name="form1">

        <input type="hidden" name="ClientID" value="123456" />
        <input type="hidden" name="Password" value="2830088828" />
        <input type="hidden" name="PracType" value="051" />
        <input type="hidden" name="Encrypt" value="12345620081111" />

        <h1>This is in the form.  Submit me here:</h1><input type="submit" value="foo" />

    </form>

</body>
</html>

В коде позади Default.aspx:

Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

    For Each value As String In Request.Form.Keys
        Debug.WriteLine(String.Format("{0} = ""{1}""", value, Request.Form.Item(value)))
    Next

End Sub
0 голосов
/ 13 ноября 2008

Почему бы не использовать System.Net.WebClient?

Пример кода (извините, это C #. Похоже, вы ищете VB. Я не могу быстро перевести.)

System.Net.WebClient wc = new System.Net.WebClient();
byte[] b;
byte[] res;
string formdata = "text=test text&password=secret&checkbox=on&textarea=a longer text sentence&submit=submit";

//    encode the form data string into a byte array 
b = System.Text.Encoding.ASCII.GetBytes(formdata);

// set the content type for a form 
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

// POST and get data
res = wc.UploadData("http://localhost:51816/gs_ontheweb/default.aspx", b);

//convert the return page from byte[] to ascii
string s = System.Text.Encoding.ASCII.GetString(res);
0 голосов
/ 12 ноября 2008

Этот HTML только на жестком диске пользователя? Возможно, безопасность браузера не допустит этого POST, потому что это считается риском.

В качестве теста - возьмите именно этот HTML-файл и поместите его на свой веб-сервер, а затем перейдите к нему. Если это работает, возможно, браузер отказывается отправлять данные. Вы можете проверить с помощью Fiddler (для IE) или Firebug в FireFox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...