在 ASP.NET Core 2.1 中将 json 数据列表传递给 HttpPost 控制器
Posted
技术标签:
【中文标题】在 ASP.NET Core 2.1 中将 json 数据列表传递给 HttpPost 控制器【英文标题】:Passing json data list to HttpPost controller in ASP.NET Core 2.1 【发布时间】:2020-04-12 20:42:36 【问题描述】:我有一个模型:
public class NotificationsDeliveryTypesIds
public int NotificationGroupId get; set;
public int DeliveryTypeId get; set;
public int UserNotificationTypeDeliveryChoiceId get; set;
public bool Selected get; set;
在我的HomeController
我有:
[HttpPost]
[AllowAnonymous]
public void SaveNotifications(List<NotificationsDeliveryTypesIds> selectedNotificationDeliveryTypesIds)
我在我的 SaveNBotifications
方法中放置了一个调试器,我试图从 Postman 调用它,但我得到了:
400 错误 - 错误请求。
我正在尝试通过身体:
[
"NotificationGroupId": 1,
"DeliveryTypeId": 2,
"UserNotificationTypeDeliveryChoiceId": 3,
"Selected":true
]
当我输入asp-controller
和asp-home
时,它会命中调试器。我可以在我的 chrome 调试器数据中看到:
selectedDeliveryTypes: 1,1,0
selectedDeliveryTypes: 3,2,271
selectedDeliveryTypes: 4,2,272
selectedDeliveryTypes: 4,1,273
selectedDeliveryTypes: 5,2,0
我希望能够从我的 Postman 中命中断点。
【问题讨论】:
你的控制器上有ApiControllerAttribute
吗?如果没有,则添加它,或将[FromBody]
添加到操作参数中,例如[FromBody]List<NotificationsDeliveryTypesIds> selectedNotificationDeliveryTypesIds
你的控制器的名字是什么?它上面有属性吗?另外,你是在 localhost 上测试它吗?
@RomanMarusyk 这不是问题,因为我删除了该列表作为参数并添加了虚拟输入(int? id = null)
,但仍然没有。如果我的 Body 在邮递员中设置为 none,因为 int 的预定义空值?需要绑定吗?
@G.Dimov 是的,我在 localhost:44300 中测试它。每个方法也有注解,这个方法有[HttpPost]和[HttpAnonymous],我的控制器名称是HomeController
向我们展示potman的屏幕
【参考方案1】:
通过使用[FromBody]
属性修饰参数来修改您的控制器操作。
[HttpPost]
[AllowAnonymous]
public void SaveNotifications([FromBody] List<NotificationsDeliveryTypesIds> selectedNotificationDeliveryTypesIds)
【讨论】:
这不是问题,因为我看不到邮递员的方法 如果这是您在 Home 控制器上的唯一 POST 操作,您应该尝试通过在 http://[host:port]/Home 上执行 POST 来调用。如果您包含多个操作,则需要为每个发布操作指定路线,例如[HttpPost("<some route>")]
【参考方案2】:
问题在于 AUthenticationCookie
【讨论】:
以上是关于在 ASP.NET Core 2.1 中将 json 数据列表传递给 HttpPost 控制器的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET Core 2.1 中将 json 数据列表传递给 HttpPost 控制器
在 ASP.net Core MVC 2.1 中创建文本文件并下载而不保存在服务器上