如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?
Posted
技术标签:
【中文标题】如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?【英文标题】:How to send data to the ASP.NET Core MVC controller in C#? 【发布时间】:2020-10-21 05:20:27 【问题描述】:我正在尝试将数据从我的 javascript 发送到我的 post 方法控制器。我将淘汰赛作为我从 Javascript 绑定到我的视图的方法。
这是我的控制器,这是 convocationData 为空的地方
public async Task<ActionResult> CreateConvocation(string convocationData)
string baseUrl = "http://localhost:8080";
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(baseUrl);
这是我尝试使用 jQuery 调用该方法的方式:
var tmpSession = self.addSession();
var tmpDescription = self.addDesc();
var convocationData =
sessionCode: tmpSession,
description: tmpDescription
;
$.ajax(
url: '/Convocations/CreateConvocation',
type: 'POST',
dataType: 'json',
data: JSON.stringify(convocationData),
contentType: 'application/json',
success: function (data)
self.Convocations.push(new Convocation(self.addSession(), self.addDesc()));
self.addDesc("");
self.addSession("");
,
error: function (err)
alert(err.status + " : " + err.statusText);
);
【问题讨论】:
您正在从 javascript 对象convocationData
传递 2 个参数(一个称为“sessionCode”,另一个称为“description”),但您的控制器操作仅接受一个名为“convocationData”的 1 个参数。您的服务端操作不知道也不关心您调用了您的 javascript 对象变量......只是它的属性和值。另外,我认为您不需要 JSON.stringify
您的数据对象。
另外,我会用[HttpPost]
装饰您的控制器操作,而不是将参数 1 逐个添加到操作方法中,而是创建一个与您从 javascript 发布的对象匹配的模型(属性名称和数据类型)。所以你的操作方法可能看起来像这样:public async Task<ActionResult> CreateConvocation(ConvocationData model)
。然后只需在 C# 中使用正确的属性创建 POCO 类(ConvocationData)
【参考方案1】:
像这样添加[FromBody]
属性
[HttpPost]
public async Task<ActionResult> CreateConvocation([FromBody]string convocationData)
return text;
您可以在这里阅读更多内容Accepting Raw Request Body Content with ASP.NET Web API
更新:
另外,在您的帖子中阅读 zgood 的 cmets。而不是使用JSON.stringify
,您应该按照他在评论中的描述创建一个相应的模型。
更新 2:
JS模型类
class Convocation
constructor(sessionCode, description)
this.sessionCode = sessionCode;
this.description = description;
C# DTO 类
public class Convocation
public string SessionCode get; set;
public string Description get; set;
然后您可以将您的操作方法更新为此
[HttpPost]
public async Task<ActionResult> CreateConvocation([FromBody]Convocation convocation)
return text;
和 ajax 发布到这里:
$.ajax(
url: '/Convocations/CreateConvocation',
type: 'POST',
dataType: 'json',
data: new Convocation(tmpSession, tmpDescription),
contentType: 'application/json',
success: function(data)
self.Convocations.push(new Convocation(self.addSession(), self.addDesc()));
self.addDesc("");
self.addSession("");
,
error: function(err)
alert(err.status + " : " + err.statusText);
);
我没有测试代码,但它应该可以工作。
【讨论】:
能否展示如何在 javascript 中调用该模型。我注意到只有一个元素被设置 我注意到你的方法只发送一个参数,基本上我需要一个类以上是关于如何在 C# 中将数据发送到 ASP.NET Core MVC 控制器?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# Asp.net 中将 SELECT sql 查询结果保存在数组中
如何在 ASP.NET MVC 中将 base64String 转换为 blob 并通过 ajax 发送到控制器?
如何从 C# ASP.NET 参数将希伯来语文本发送到 SQL Server?