【问题标题】:data is not passing in asp.net core数据未在 asp.net 核心中传递
【发布时间】:2019-11-29 05:56:48
【问题描述】:

我在 asp.net 核心中遇到问题,我无法解决。 我从 asp.net MVC 框架中获取了一个工作代码并将其传递给 asp.net core MVC。

代码具有 angular 1.6 的 HTTP-POST 如下

$http.post('/Main/Post', $scope.ContactEmailDetails, { header: { 'Content-Type': 'application/json' } });

当我测试它时,$scope.ContactEmailDetails 具有值,并且调试器在 HTTP-POST 方法的开头停止了我,因此路由正常。

public class ContactUsProperties
{
    public string Phone { get; set; }
    public string Email { get; set; }
    public string Name { get; set; }
    public string Subject { get; set; }
    public string Body { get; set; }
}

控制器动作

[HttpPost]
public void Post(ContactUsProperties EmailDetails)
{
    //Working Code...
}

但是传输的所有数据都是空的,

所以我有 2 个问题:

  1. 如何解决。
  2. 更重要的是,为什么?! ASP.NET MVC 与 ASP.NET CORE MVC 有什么区别?

【问题讨论】:

  • 你有 json 示例给我们吗?解析位可能有错误
  • 可能是模型绑定问题public void Post([FromBody]ContactUsProperties EmailDetails)
  • @arlanschouwstra 是的,我上传到这里imgur.com/a/T80Wo52
  • @Nkosi 据我所知 [Frombody] 在这里使用单个变量(例如字符串)我正在传递一个对象。假设你是对的,它为什么在非核心 ASP.NET 上工作?
  • @saba Core 是对先前版本的完全重写。有些事情与以前相比发生了变化。 docs.microsoft.com/en-us/aspnet/core/mvc/models/…

标签: c# angularjs asp.net-mvc asp.net-core http-post


【解决方案1】:

如何解决。

这是一个模型绑定问题。使用[FromBody] 属性作为操作的参数。这样,模型绑定器就知道从何处获取数据以填充模型。

public void Post([FromBody]ContactUsProperties EmailDetails) {
    //...
}

更重要的是,为什么?!

只有 MS 开发人员才能准确告诉您为什么要进行更改。

ASP.NET MVC 与 ASP.NET CORE MVC 有什么区别?

ASP。 Net Core 是对先前版本的完全重写。有些事情与以前相比发生了变化。

参考Model Binding in ASP.NET Core

模型绑定默认以键值对的形式获取数据 来自 HTTP 请求中的以下来源:

  1. 表单字段
  2. 请求正文 (适用于具有 [ApiController] 属性的控制器。)
  3. 路线数据
  4. 查询字符串参数
  5. 上传的文件

如果默认行为没有给出正确的结果,您必须明确说明从哪里绑定数据。

  • [FromQuery] - 从查询字符串中获取值。
  • [FromRoute] - 从路线数据中获取值。
  • [FromForm] - 从发布的表单字段中获取值。
  • [FromBody] - 从请求正文中获取值。
  • [FromHeader] - 从 HTTP 标头获取值。

【讨论】:

  • 我从未设法找到一个好的解释,但我在某处看到他们希望 [FromBody] 成为 ASP.NET Core 中出于“安全原因”的显式选择。我认为模型绑定方法确实值得关注,该方法只是从任何地方获取它可以获取的任何数据。
  • @KirkLarkin 在源代码第一句下的同一文档中,它将自动从正文中获取ApiController,对于 MVC 控制器,您必须明确。
  • 是的,确实如此。添加[ApiController] 也是一个显式 选择。
猜你喜欢
  • 2021-03-19
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-24
  • 2021-06-14
  • 2014-04-27
相关资源
最近更新 更多