gpt4 book ai didi

c# - 如何将字符串传递给 Angular 中的发布请求?

转载 作者:行者123 更新时间:2023-12-05 06:31:40 25 4
gpt4 key购买 nike

我已经做了一些搜索,但似乎没有任何帮助。

我的 Angular 看起来像这样,用户名是一个字符串。

getUser(username = null) {

if (username == null) {
username = this.cookie.getCookieValue("username");
}
console.log(JSON.stringify({ username: username }));
console.log("passing in "+ username);

return this.http.post<User>(this.userBackendUrl + "/user", username, httpOptions).pipe(map(user => {
console.log("Successfully got the user!");
console.log(user);
return user;
}));}

后端方法看起来像

public ActionResult GetUser(string username)
{

我可以点击我的方法,但我在后端的用户名字符串始终为空。

最佳答案

根据请求发送字符串的方式,您必须执行以下操作:

作为纯字符串发送

如果您的用户名 或字符串在请求中作为纯字符串 发送,如下所示:

"testuser"

然后您可以将 [FromBody] 属性添加到 Controller 中的 string 参数,如下所示:

public ActionResult GetUser([FromBody] string username)
{
//...
}

如果您的用户名或字符串未作为 "testuser" 发送,请将变量或字符串传递给 JSON.stringify 方法,如下所示:

return this.http.post<User>(this.userBackendUrl + "/user", JSON.stringify(username), httpOptions) //...

作为 JSON 对象发送

如果您的用户名或字符串在请求中作为 JSON 对象 发送,如下所示:

{
username: "testuser"
}

然后您需要创建一个单独的类(例如 DTO,GetUserRequest)tp 绑定(bind)到,它应该如下所示:

public class GetUserRequest
{
public string Username { get; set; }
}

稍后您可以将模型(您发送的 JSON 对象)绑定(bind)到此类,再次提供 [FromBody] 属性和一个以创建的类作为数据类型的参数,如下所示:

public ActionResult GetUser([FromBody] GetUserRequest user)
{
//...
}

多个参数无需创建额外的类/DTO

正如 Lionel 在这里询问的那样,我知道如何在不创建额外类或 DTO 的情况下绑定(bind)到多个参数的两种方法。

不幸的是,据我所知,您不能将 [FromBody] 绑定(bind)到多个参数。

但是有以下两种方式:

以编码的形式发送数据

如果您发送数据形式的 url 编码,您可以使用 [FromForm] 属性绑定(bind)数据/参数,如下所示:

将数据作为编码的表单 url 发送:

username=test&email=test%40gmail.com&created=2018-08-07T15%3A02%3A00.736Z

使用[FromForm]属性绑定(bind)数据:

public ActionResult GetUser([FromForm] string username, [FromForm] string email, [FromForm] DateTime created)
{
//...
}

将数据作为 JSON 对象发送并与 Newtonsoft 绑定(bind)

另一种方法是使用 Newtonsoft 的 JObject。我认为这种方式不太直观。

您可以将数据作为普通的 JSON 对象发送,如下所示:

{   
"username": "test",
"email": "test@gmail.com",
"created": "2018-08-07T14:53:54.639Z"
}

然后您可以使用 [FromBody] 属性将数据绑定(bind)到单个 JObject,然后将数据绑定(bind)到单独的变量,如下所示:

public void GetUser([FromBody] JObject requestBody)
{
string username = requestBody["username"].ToString();
string email = requestBody["email"].ToString();
DateTime created = requestBody["created"].ToObject<DateTime>();
}

关于c# - 如何将字符串传递给 Angular 中的发布请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51725929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com