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
'source' 카테고리의 다른 글
GLib 기능을 사용하는 이유는 무엇입니까? (0) | 2023.10.31 |
---|---|
Swift 프로토콜 오류: 클래스 유형이 아닌 경우 'weak'을(를) 적용할 수 없습니다. (0) | 2023.10.26 |
C 소비용 C++ 클래스 API 포장 (0) | 2023.10.26 |
가변 인수는 gcc에서 어떻게 구현됩니까? (0) | 2023.10.26 |
현재 카테고리의 워드프레스 게시물만 나열합니다. (0) | 2023.10.26 |