Получить данные POST в C#/ASP.NET
Я пытаюсь получить данные POST, но мне не везет. Мой код ниже. Когда я нажимаю кнопку формы, ничего не происходит.
Я ожидал, что, по крайней мере, моя IDE будет зависать A.Ret()
, но ничего не происходит вообще.
Файл Test.cs
using System.Web;
public class A
{
public static string ret() {
var c = HttpContext.Current;
var v = c.Request.QueryString; // <-- I can see get data in this
return c.Request.UserAgent.ToString();
return c.Request.UserHostAddress.ToString();
return "woot";
}
}
Файл Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="aspnetCSone._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server" method="post" action="Default.aspx">
<input type=hidden name="AP" value="99" />
<input type=button value="Submit" />
<div>
<a id="aa">a</a>
<% = A.ret() %>
</div>
</form>
</body>
</html>
4 ответа
Попробуйте использовать:
string ap = c.Request["AP"];
Это читает из куки, формы, строки запроса или серверных переменных.
В качестве альтернативы:
string ap = c.Request.Form["AP"];
просто читать из данных формы.
c.Request["AP"]
будет читать опубликованные значения. Также вам нужно использовать кнопку отправки для отправки формы:
<input type="submit" value="Submit" />
вместо
<input type=button value="Submit" />
Я немного удивлен, что этот вопрос задавался так много раз прежде, но наиболее многократно используемое и дружественное решение не было задокументировано.
У меня часто есть веб-страницы, использующие AngularJS, и когда я нажимаю кнопку "Сохранить", я "помещаю" эти данные обратно на мою страницу.aspx или обработчик.ashx, чтобы сохранить их обратно в базу данных. Данные будут в форме записи JSON.
На сервере, чтобы превратить необработанные опубликованные данные обратно в класс C#, вот что я хотел бы сделать.
Сначала определите класс C#, который будет содержать опубликованные данные.
Предположим, что моя веб-страница публикует данные JSON следующим образом:
{
"UserID" : 1,
"FirstName" : "Mike",
"LastName" : "Mike",
"Address1" : "10 Really Street",
"Address2" : "London"
}
Тогда я бы определил класс C# как этот...
public class JSONRequest
{
public int UserID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
}
(Эти классы могут быть вложенными, но структура должна соответствовать формату данных JSON. Поэтому, если вы публикуете запись пользователя JSON со списком записей Order внутри нее, ваш класс C# также должен содержать List<>
Порядка записи.)
Теперь, в моем файле.aspx.cs или.ashx, мне просто нужно сделать это и оставить JSON.Net, чтобы выполнить тяжелую работу...
protected void Page_Load(object sender, EventArgs e)
{
string jsonString = "";
HttpContext.Current.Request.InputStream.Position = 0;
using (StreamReader inputStream = new StreamReader(this.Request.InputStream))
{
jsonString = inputStream.ReadToEnd();
}
JSONRequest oneQuestion = JsonConvert.DeserializeObject<JSONRequest>(jsonString);
И это все. Теперь у вас есть JSONRequest
класс, содержащий различные поля, которые были размещены на вашем сервере.
Следующее нормально в HTML4, но не в XHTML. Проверьте свой редактор.
<input type=button value="Submit" />