如何将课程传递给服务器
Posted
技术标签:
【中文标题】如何将课程传递给服务器【英文标题】:How do I pass class to server 【发布时间】:2021-10-20 16:58:16 【问题描述】:将单个整数参数从我的客户端传递到服务器上的 API 有效。
[HttpPost]
public JsonResult GetNextClients(int? clientID)
但是传递一个类不会。
这里定义的类:
public class ClientParameters
public int ClientID;
public int FamilyID;
public bool IncludeFirstName;
public bool IncludeLastName;
public bool ExactDate;
方法:
[HttpPost]
public JsonResult GetClients(ClientParameters param)
我发送的数据如下所示:
return
"ClientID": 5,
"FamilyID": 12,
"IncludeFirstName": true,
"IncludeLastName": true,
"ExactDate": true
;
从 Fiddler 运行它会命中我的方法,我得到了类,但它都是默认值。
我尝试了 JSON.Stringify 并从客户端和 Fiddler 发送
"\"ClientID\":5,\"FamilyID\":0,\"IncludeFirstName\":true,\"IncludeLastName\":true,\"ExactDate\":true"
我尝试添加
dataType: "json"
contentType: "application/json; charset=utf-8"
仍然获取默认值。
标准路由:
routes.MapRoute(
name: "Default",
url: "controller/action/id",
defaults: new controller = "Home", action = "Index", id = UrlParameter.Optional
);
【问题讨论】:
快速猜测:使用属性,而不是类中的字段。 如果您想将对象传递给 API,请确保您的 API 方法是 POST 方法。 @KrzysiekSzymczak 感谢您的想法,但没有改变。 @YongShun 我的错。我应该包括那个细节。 @BWhite 你 100% 确定你得到默认值吗?我的意思是您展示的示例与您的模型 1-1 不匹配。我是你的模特ClientId
,但你发送ClientImportID
。然后在 FamilyId 中发送 0(默认值),只有这三本书可以指示您是否真的获得默认值。请再次验证它;)
【参考方案1】:
以下是 .NET Core 3.1 中的 C# API 示例。代码在控制器中,它是具有服务层的存储库模式的一部分,全部使用依赖注入。
[HttpPost]
public virtual ActionResult<T> Create([FromBody] T data)
try
return Ok(_service.Create(data));
catch (Exception e)
return BadRequest(e.Message);
注意您需要在您的发布请求参数中使用[FromBody]
查看以下链接的“发送 POST 请求”部分,以确保您的 AJAX 格式正确。 Sending POST Requests
【讨论】:
【参考方案2】:我不知道为什么传递参数对我不起作用,但现在我突然想到我以前遇到过这种情况。 我不应该手动解析它,但这行得通。
[HttpPost]
public JsonResult GetClients()
string value = new StreamReader(Request.InputStream).ReadToEnd();
ClientParameters param = JsonConvert.DeserializeObject<ClientParameters>(value);
有趣的是,无论我发送 contentType 还是 dataType,它都有效。 同样有趣的是,来自 Fiddler,如果我对 JSON 进行字符串化,它就不起作用。同样,不管 contentType 或 dataType。 然而,从网络客户端,它只有在我将它字符串化时才有效。
【讨论】:
因为当您自己解析 inputStream 时,框架并不关心它是什么“内容类型”,因为它不必解析它;)正确解析它是您的责任(喜欢你的JsonConvert...
);)以上是关于如何将课程传递给服务器的主要内容,如果未能解决你的问题,请参考以下文章