从POST方法检索数据时获取异常?

时间:2018-10-09 12:29:43

标签: c# asp.net asp.net-web-api asp.net-web-api2

读取帖子数据时出现异常。  我在这条线上出现错误:

HttpContext.Current.Request.Form["UserID"].ToString();

错误是:

  

System.Collections.Specialized.NameValueCollection.this [string] .get   返回null。

在方法中,我输入了以下代码:

StreamReader reader = new StreamReader(HttpContext.Current.Request.InputStream);
string requestFromPost = reader.ReadToEnd();

数据像这样正确地输入:

{
  "UserID": "1000",
  "Password": "ABCD"
}

为什么我在这个HttpContext.Current.Request.Form["UserID"].ToString()中没有获得价值?我也尝试了Request.QueryString但在这里没有成功。     我在哪里做错了?任何帮助或建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

此请求上没有Form。要将请求正文解释为表单数据,它必须:

  • 内容类型为x-www-form-urlencoded
  • 实际上被格式化为表单编码值,即UserID=foo&Password=bar

JSON内容是JSON,不会被解释为表单数据。

Web API应该已经为您解决了这一问题。给定一种操作方法:

public void Action(Credentials credentials)

其中Credentials类如下所示:

public class Credentials 
{
    string UserID { get; set;}
    string Password { get; set; }
}

您无需执行任何其他操作即可使框架将传入的JSON数据转换为Credentials的实例并将其传递给action方法。这是自动的,除非您做了一些奇怪的事情而违反了WebAPI期望的约定。