为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
白衣非少年 2022-01-09 10:40:58
上下文:我的应用程序位于中央登录应用程序后面,每当用户申请访问我的应用程序时,我的应用程序都会收到一个包含用户信息的 http 请求。我需要从 HttpRequest 正文中检索用户信息。这是我到目前为止所尝试的:currentContext.HttpContext.Request.Query["user-name"].toString();  // got nothingusing (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 nothingRequest.Form["user-name"] \\ return nothing我无法使用模型绑定的原因是,在 HttpRequest 正文中,键名是“用户名”,而在 c# 中,我无法创建带有“-”的变量同时,在我的 .net 4.6 应用程序中,Request["KeyName"].toString()工作得很好。
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

我想出了一种将原始HttpRequest正文转换为查询字符串的方法,然后从中读取参数。


这是代码:


var queryString = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(requestBody);


string paramterValueIWant = queryString["KeyName"];

但是有一个问题,当KeyName体内不存在时,它会抛出异常。因此,您必须进行空检查或尝试捕获。


我仍然觉得应该有更好的方法来读取参数,正如我所提到的,在我的 .net 4.6 应用程序中,我需要做的就是Request["KeyName"].


查看完整回答
反对 回复 2022-01-09
?
狐的传说

TA贡献1804条经验 获得超3个赞

假设我们正在讨论 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

}

然后你仍然可以使用从 Body 获取数据 Request.Form["KeyName"]


查看完整回答
反对 回复 2022-01-09
  • 2 回答
  • 0 关注
  • 917 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号