如何从ASP.NET Core中的Request.Body中读取参数

时间:2018-09-07 23:27:07

标签: c# asp.net-core httprequest

上下文:我的应用程序位于中央登录应用程序的后面,每当用户对我的应用程序应用访问时,我的应用程序都会收到一个包含用户信息的http请求。而且我需要从HttpRequest正文中检索用户信息。

这是我到目前为止尝试过的:

currentContext.HttpContext.Request.Query["user-name"].toString();  // got nothing

using (var reader = new StreamReader(currentContext.HttpContext.Request.Body))
{
    var body = reader.ReadToEnd();
}   // I can get the raw HttpRequest Body as "user-name=some&user-email=something"

我可以使用任何方法来解析Request.Body中的参数和值吗? 我尝试了以下操作,但一无所获。

HttpContext.Item['user-name'] \\return nothing Request.Form["user-name"] \\ return nothing

我无法使用模型绑定的原因是,在HttpRequest主体中,键名是“用户名”,而在c#中,我无法创建带有“-”的变量

同时,在我的.net 4.6应用程序中,Request["KeyName"].toString()可以正常工作。

1 个答案:

答案 0 :(得分:1)

假设我们正在谈论POST / PUT / PATCH调用,则可以使用
Request.Form["KeyName"] 在您的API方法中,并将Ajax请求的'contentType'设置为application/x-www-form-urlencoded
请注意,Request在方法内部自动可用。无需显式调用它。

在使用GET / DELETE通话时,我更喜欢使用

[HttpGet("{UserId}")] // api/User/{UserId}
public IActionResult Get(int UserId){
  // do stuff calling directly UserId
}

或使用PUT / PATCH

[Route("User/{EntityId}/{StatusFilter}")] // api/User/{EntityId}/{StatusFilter}
[HttpPut] 
public IActionResult Put(int EntityId, int StatusFilter){
  // do stuff calling directly EntityId and StatusFilter
}

然后您仍然可以使用Request.Form["KeyName"]

从身体获取数据