2009-12-01 3 views
6

외부 플래시 프로그램에서 게시 된 데이터 배열을받는 C#을 사용하여 ASP.NET 처리기를 개발 중입니다. 데이터를 배열로 사용하려면 어떻게해야합니까? ASP.NET에서 자동으로 HTML 컨텍스트가 포스트 데이터를 html로 디코딩하여 간단한 문자열로 나옵니다. 이 경우 구분 기호는 쉼표 (항상 쉼표 일 수 있으며 이전에는이 ​​기능을 사용하지 못했을 수 있음)입니다.POST 데이터를 C#으로 배열로 가져 오는 방법

내가 두 가지 중 하나를해야 할 것 같습니다 :

1) 쉼표 만 대신 고객의 실제 배열을 대표 할 수있는 배열에 대한 구분 기호로 사용의 HTML 인코딩 된 형태로 데이터를 얻을 수있는 방법 양식 입력 (고객 입력 쉼표는이 시점에서 인코딩 된 상태로 유지됩니다).

2) PHP print_r(), var_dump() 함수를 시뮬레이트하는 방법 (PHP를 직접 알지는 못하지만 그 속임수를 사용합니다) 변수를 배열에 덤프 할 수 있습니다.

이렇게하는 방법에 대한 도움을 주시면 감사하겠습니다. 미리 감사드립니다!

편집 1 : 게시되는 데이터는 예를 들어 일련의 주소, 우편 번호 및 선택적 추가 정보 일 수 있습니다. 예 : address=testroad%5F5,another%5Ftestroad%5F6&postalcode=12345,56789&extrainfo=,firstwasempty. 이 예에서 두 개의 주소 (공백과 같음 %5F)와 두 개의 우편 번호가 있지만 쉼표가 비어 있기 전에 두 번째 주소에만 공백으로 extrainfo이 포함되어 있습니다. 이제는 영어가 제 모국어가 아니기 때문에 문제는 가능한 고객 작성 쉼표가 해독 후 실제 배열 분할 쉼표와 섞여 있다는 것입니다.

답변

7
public void ProcessRequest(HttpContext context) 
{ 
    using (var reader = new StreamReader(context.Request.InputStream)) 
    { 
     string postedData = reader.ReadToEnd(); 
     foreach (var item in postedData.Split(new [] { '&' }, StringSplitOptions.RemoveEmptyEntries)) 
     { 
      var tokens = item.Split(new [] { '=' }, StringSplitOptions.RemoveEmptyEntries); 
      if (tokens.Length < 2) 
      { 
       continue; 
      } 
      var paramName = tokens[0]; 
      var paramValue = tokens[1]; 
      var values = paramValue.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
      foreach (var value in values) 
      { 
       var decodedValue = context.Server.UrlDecode(value); 
       // Do something with the decoded value which corresponds to paramName 
      } 
     } 
    } 
} 
+0

감사합니다. 데이터를 가져와야합니다. 문제는 추측 한대로 구문 분석합니다. 내가 얻으려고하는 데이터는 주소, 예를 들어 "주소", "우편 번호"등의 묶음입니다. 루프 및 하위 문자열을 사용하여 문제가있는 파싱을 가져옵니다. 그렇다면 데이터를 내부적으로 디코딩하지 않고 양식 또는 "쿼리 문자열"로 가져 오는 방법이 있습니까? – Kahn

+0

게시 된 데이터를 구문 분석하기 위해 String.Split을 사용하는 방법을 보여주는 예를 사용하여 답변을 업데이트했습니다. –

+0

아주 오래된 게시물이지만, 지금보고있는 사람이라면 Json을 사용하여 더 나은 방법을 제시 할 수 있습니다. var reader = 새 StreamReader (context.Request.InputStream) 문자열 postedData = reader.ReadToEnd(); JObject obj = JObject.Parse (postedData); 이제 키를 사용하여 obj에 액세스 할 수 있습니다. var user = (string) obj [ "UserID"]; – Blossom

1

확인 HttpRequest.InputStream 속성 :

15

동일한 문제가 있었지만이 게시물을 발견했지만 지금은 더 나은 방법을 찾았습니다.

당신은 모든 POST 변수에 같은 이름을 넣어해야하므로 데이터를 게시하는 것은 :

주소 = AddressValue1 & 주소 = AddressValue2 & 주소 = AddressValue3

는 C#에서 코드 스크립트를 사용하여 데이터 매개 변수에 액세스 할 수 있습니다.

+1

감사합니다!한 번 이상 upvote 수 있습니다. – Clox

관련 문제