2013-07-15 2 views
0

하나의 Postback 메서드와 두 번째 정적 Webmethod 호출이있는 테스트 로그인 페이지 (.aspx)를 작성했습니다. 자바 스크립트 함수 "txt1"및 "txt2"의 값을 취하고 C 번호가 [의 WebMethod]C# 로그인 페이지에 게시 자격

는 HTML 호출

<input type="text" id="txt1" /> 
<input type="text" id="txt2" /> 

//JS function sends values to C# WebMethod 
PageMethods.ReceiveUsernamePassword(txt1.value, txt2.value); 

C 번호 :

[WebMethod] 
    public static string ReceiveUsernamePassword(string user, string pass) 
    { 
     File.AppendAllText(@"C:\Z\upjs.txt", user + " " + pass + " js " + "\r\n\r\n\r\n"); 
     return "Success JS"; 
    } 

별도의 클라이언트 응용 프로그램은 시뮬레이션 그 POST는 아래의 코드를 사용합니다. 1073/PostData_Server/Default.aspx를/ReceiveUsernamePassword :를 URL 포인트 localhost로

using (WebClient client = new WebClient()) 
     { 
      System.Collections.Specialized.NameValueCollection reqparm = new System.Collections.Specialized.NameValueCollection(); 
      reqparm.Add("user", "user1"); 
      reqparm.Add("pass", "password1"); 
      byte[] responsebytes = client.UploadValues("http://local:1073/PostData_Server/Default.aspx", "POST", reqparm); 
      string responsebody = Encoding.UTF8.GetString(responsebytes); 
     } 

Firebug POST Data

대신 내 테스트 클라이언트 응용 프로그램의 "성공"또는 "성공 JS"를 얻기의

Firebug response

, I 전체 HTML 문서를 응답 메시지로 수신합니다. 또한 텍스트 파일이 서버 측에 쓰여지지 않습니다. 포스터 (https://addons.mozilla.org/en-us/firefox/addon/poster/)를 다운로드하여 클라이언트 응용 프로그램에서 오류가 아닌지 확인했습니다. 또한 전체 HTML 문서를 응답으로받습니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

실마리는 HTML 응답 메시지에 있습니다. 실패한 전화에 대한 응답 패널을 게시하십시오. – Malk

+0

@Malk 응답 메시지는 Visual Studio에 표시된 단어에 대한 내 로그인 페이지의 HTML 문서 단어입니다. 다음은 스 니펫입니다. 사용자 이름 : \ r \ n <입력 이름 = \ "txt_username \"유형 = \ "텍스트 \"id = \ "txt_username \"/> \ r \ n
\ r \ n 비밀번호 \ r \ n <입력 유형 = \ "제출 \"이름 = \ "btn_submit \"<입력 이름 = \ "txt_password \"유형 = \ "텍스트 \"id = \ "txt_password \"/> \ r \ n
\ 값 : \ "제출 \"id = \ "btn_submit \"/> \ r \ n \ r \ n
\ r \ n
\ r \ n
\ r \ n
\ r \ n
\ r \ n \ r \ n 사용자 이름 : \ r \ n invulnarable27

답변

0

그냥이 질문에 대한 내 결과를 업데이트 할 것이라고 생각했습니다. [WebMethod]를 호출하기 위해서는 ContentType이 "application/json"으로 설정되어야합니다. ContentType을 변경할 수 없으므로 WebClient.UploadValues ​​()도 사용할 수 없습니다. 따라서 올바른 POST 서명을 보내려면 HttpWebRequest 클래스를 사용해야합니다.

메모 : 보내는 사용자 이름과 비밀번호는 반드시 json 형식이어야합니다!

HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL); 
    myHttpWebRequest.Method = "POST"; 
    myHttpWebRequest.ContentType = "application/json; encoding=utf-8"; 

    using (var streamWriter = new StreamWriter(myHttpWebRequest.GetRequestStream())) 
    { 
     string json = "{user:\"user1\",pass:\"pass1\"}"; 

     streamWriter.Write(json); 
     streamWriter.Flush(); 
    } 

    var httpResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
     responsebody = streamReader.ReadToEnd(); 
    } 
관련 문제