source

C#에서 HTTP Post 데이터를 가져오는 방법?

nicesource 2023. 10. 26. 21:15
반응형

C#에서 HTTP Post 데이터를 가져오는 방법?

메일건 API를 사용하고 있습니다.제가 그들에게 URL을 제공해야 하는 부분이 있는데, 그러면 그들은 HTTP Post로 저에게 데이터를 올릴 것입니다.

저는 메일건에게 이 URL(http://test.com/MailGun/Webhook.aspx) 을 제공하여 그들이 데이터를 게시할 수 있도록 합니다.나는 그들이 보내는 매개 변수 이름 목록을 가지고 있습니다(receiven, domain, ip, ...).

저는 어떻게 제 페이지에 게시된 자료를 얻을 수 있는지 잘 모르겠습니다.Webhook.aspx 페이지에서 다음과 같은 코드를 시도했지만 모두 비어 있습니다.

 lblrecipient.text= Request.Form["recipient"];

 lblip.Text= Request.Params["ip"];

 lbldomain.Text = Request.QueryString["domain"];

게시된 데이터를 얻기 위해 무엇을 시도해야 할지 확실하지 않습니까?

이 코드는 POST에서 전송되는 모든 양식 변수를 나열합니다.이렇게 하면 게시물 값의 적절한 이름이 있는지 확인할 수 있습니다.

string[] keys = Request.Form.AllKeys;
for (int i= 0; i < keys.Length; i++) 
{
   Response.Write(keys[i] + ": " + Request.Form[keys[i]] + "<br>");
}

이 코드는 HTTP 요청에서 원시 입력 스트림을 읽습니다.요청에서 데이터를 사용할 수 없는 경우 이를 사용합니다.폼 또는 기타 모델 바인딩 또는 오는 대로 바이트/텍스트에 액세스해야 하는 경우.

using(var reader = new StreamReader(Request.InputStream))
    content = reader.ReadToEnd();

간단히 사용할 수 있습니다.Request["recipient"]"웹 요청 중에 클라이언트가 보낸 HTTP 값 읽기"

QueryString, Form, Cookies 또는 ServerVariables 컬렉션에서 데이터에 액세스하려면 Request["key"]를 작성할 수 있습니다.

출처 : MSDN

업데이트 : 대화 요약하기

MailGun이 사이트에 게시하는 값을 보려면 MailGun이 작성 중인 웹 요청에서 값을 읽어야 합니다. 이 값을 어딘가에 기록한 다음 페이지에 표시합니다.

MailGun이 POST 값을 보낼 엔드포인트와 기록된 값을 볼 때 사용하는 다른 페이지가 있어야 합니다.

지금 페이지가 하나인 것 같습니다.따라서 이 페이지를 보고 요청 값을 읽을 때는 MailGun이 아닌 요청에서 값을 읽는 것입니다.

한 발짝도 안 빠졌네요.서버에 값을 기록/저장해야 합니다(메일건은 클라이언트).그런 다음 서버에서 해당 값을 검색해야 합니다(웹 브라우저가 있는 PC는 클라이언트가 됩니다).이 파일은 두 개의 완전히 다른 asx 파일(또는 매개 변수가 다른 동일한 파일)이 됩니다.

aspx 1페이지(메일건이 가지고 있는 것):

var val = Request.Form["recipient"];
var file = new File(filename);
file.write(val);
close(file);

aspx 2페이지:

var contents = "";
if (File.exists(filename))
  var file = File.open(filename);
  contents = file.readtoend();
  file.close()

Request.write(contents);

사용 방법:

    public void ShowAllPostBackData()
    {
        if (IsPostBack)
        {
            string[] keys = Request.Form.AllKeys;
            Literal ctlAllPostbackData = new Literal();
            ctlAllPostbackData.Text = "<div class='well well-lg' style='border:1px solid black;z-index:99999;position:absolute;'><h3>All postback data:</h3><br />";
            for (int i = 0; i < keys.Length; i++)
            {
                ctlAllPostbackData.Text += "<b>" + keys[i] + "</b>: " + Request[keys[i]] + "<br />";
            }
            ctlAllPostbackData.Text += "</div>";
            this.Controls.Add(ctlAllPostbackData);
        }
    }

웹 브라우저에서 개발자 콘솔(Chrome 및 IE에서 F12)을 연 다음 네트워크 탭을 열고 요청 및 응답 데이터를 봅니다.다른 옵션 - Fiddler (http://fiddler2.com/) 를 사용합니다.

POST 요청이 페이지로 전송되는 것을 확인할 수 있게 되면 쿼리 문자열과 헤더를 확인합니다.데이터가 쿼리 문자열 형태로 제공되는지 또는 페이지로 전송되지 않는지 확인할 수 있습니다.

업데이트: 죄송합니다. 먼저 MailGun API를 살펴보아야 했습니다. 브라우저를 통하지 않고 서버에서 직접 요청이 옵니다.Request의 모든 멤버를 디버그하고 검사해야 합니다.MailGun에서 POST를 받으면 파람스.

이거 먹어봐요.

string[] keys = Request.Form.AllKeys;
var value = "";
for (int i= 0; i < keys.Length; i++) 
{
   // here you get the name eg test[0].quantity
   // keys[i];
   // to get the value you use
   value = Request.Form[keys[i]];
}

게시 데이터를 헤더에 할당했기 때문에 다음과 같이 얻을 수 있습니다.

protected void Page_Load(object sender, EventArgs e){
    ...
    postValue = Request.Headers["Key"];

이것이 제가 가치와 키를 첨부한 방법입니다.POST:

var request = new NSMutableUrlRequest(url){
    HttpMethod = "POST", 
    Headers = NSDictionary.FromObjectAndKey(FromObject(value), FromObject("key"))
};
webView.LoadRequest(request);

'요청'을 확인할 수 있습니다.양식.열쇠'.잘 작동하지 않을 경우 'request.inputStream'을 사용하여 모든 요청 키를 알려주는 soap 문자열을 얻을 수 있습니다.

언급URL : https://stackoverflow.com/questions/20151556/how-to-get-the-http-post-data-in-c

반응형