欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 在.NET Core控制器中获取AJAX传递的Body参数

在.NET Core控制器中获取AJAX传递的Body参数

2025/6/12 17:08:28 来源:https://blog.csdn.net/yhj198927/article/details/148473579  浏览:    关键词:在.NET Core控制器中获取AJAX传递的Body参数

.Net Core是支持前后端不分离式的开发的,如果在原始系统中采用不分离式开发,后面需要在原系统中增加功能,并且新的服务采用其他语言开发,且系统原来功能保持原样,这样前端系统可以单独调用新开发的接口。

但是,如果该系统涉及到权限控制,因为Net Core前后端不分离可以获取到用户的登录信息,但是新的服务没有此功能,无法获取到用户的权限信息,这时就需要通过Net Core转调一次接口才行。

前端代码如下

$.ajax({url: '/your/action',type: 'POST',contentType: 'application/json',data: JSON.stringify({ property1: 'value1', property2: 'value2' }),success: function(response) {console.log(response);}
});

1. 使用FromBody特性

这是最推荐的方式,适用于JSON格式的请求体:

[HttpPost]
public IActionResult YourAction([FromBody] YourModel model)
{// 直接使用model对象// 调用其他语言写的接口return Ok();
}public class YourModel
{public string Name { get; set; }public int Age { get; set; }
}

2. 动态类型接收

如果不确定参数结构或想使用动态类型:

[HttpPost]
public IActionResult YourAction([FromBody] dynamic data)
{string value1 = data.property1;string value2 = data.property2;// 调用其他语言写的接口return Ok();
}

3. 直接从Request.Body读取

对于更复杂的场景,可以手动读取请求体:

[HttpPost]
public async Task<IActionResult> YourAction()
{// 启用缓冲(如果还没有启用)Request.EnableBuffering();// 获取原始请求体Request.Body.Position = 0;using (var reader = new StreamReader(Request.Body)){// 获取Body参数var body = await reader.ReadToEndAsync();// 调用其他语言写的接口}return Ok();
}

4. 使用JObject解析

使用Newtonsoft.Json的JObject:

[HttpPost]
public IActionResult YourAction([FromBody] JObject data)
{var model = data.ToObject<YourModel>();// 或者直接访问属性var value = data["propertyName"].Value<string>();// 调用其他语言写的接口return Ok();
}

注意事项

  1. Content-Type头:确保前端设置了正确的Content-Type(通常为application/json

  2. 模型绑定:确保你的模型类属性与前端发送的数据键名匹配

  3. 大小写敏感性:默认情况下.NET Core使用驼峰命名解析,可以通过配置改变:

    services.AddControllers().AddJsonOptions(options => {options.JsonSerializerOptions.PropertyNamingPolicy = null; // 保持原样});
  4. 异步读取:如果手动读取Request.Body,请确保使用异步方法

  5. 启用请求体缓冲:如果需要多次读取请求体,需要启用缓冲:

        // 启用缓冲(如果还没有启用)Request.EnableBuffering();// 获取原始请求体,在读取后总是重置 Request.Body.Position = 0,否则后续读取会得到空内容Request.Body.Position = 0;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词