【问题标题】:Asp.net core webapi getting null value posted from Angular4 appAsp.net 核心 webapi 获取从 Angular4 应用程序发布的空值
【发布时间】:2018-07-28 20:42:52
【问题描述】:

我是Angular4 的新手,并且处于快速交付东西的情况,所以没有时间彻底学习它,如果我的问题看起来很幼稚,请原谅:

从我的 Asp.Net Web API 我有 Confirmemail API 必须从 Angular4 应用程序调用,看起来像这样:

Asp.net WebApi:

[HttpPost]
public async Task<object>ConfirmEmail([FromBody] string userid,[FromBody] string code)
{
}

在 Angular4 服务 API 中:

ConfirmEmail(userid,code)
{           
    let url =`api/account/ConfirmEmail`;
    let data= `userid=${userid}&code=${code}`;
    console.log(data);
    return this.http.post(url,data);
}

在这里,我在 console.log 中检查了数据是否正常,但在 webapi 端,我发现这些字符串为空。我尝试删除 [FromBody],但它对我不起作用。

我真的不知道缺少什么,准备所有这些东西几乎是一天,但没有任何成功。你们有什么解决办法吗?

【问题讨论】:

    标签: c# asp.net angular asp.net-web-api http-post


    【解决方案1】:

    您可以使用JSON.stringify(data);创建一个同时包含用户标识和代码的对象并转换为字符串

    let url =`api/account/ConfirmEmail`;
    let userObj = {'userid':userid,'code':code};
    let data= JSON.stringify(userObj);
    return this.http.post(url,data);
    

    并以身份访问它

    [HttpPost]
    public async Task<object>ConfirmEmail([FromBody] User userObj)
    {
    
    }
    

    【讨论】:

    • 这是我心中的另一种方式,但如果我喜欢简单的参数传递
    • 这就是http post的工作原理!如果你想传递参数,你可以使用 httpget
    • 尝试了您的解决方案,显示错误为不受支持的媒体类型。
    • @HasanFathi 是的,我明白 :)
    • 你可以只标记一个并支持两个:)。我认为哈桑的答案应该被选为正确的
    【解决方案2】:

    对于 post 数据到您的 API 来自 Angular 应用程序,请在 angular 中尝试此操作:

    let url ="api/account/ConfirmEmail";
    
    var userInfo = { "userid":userid, "code":code }
    let content = JSON.stringify(userInfo);
    
    let headers = new HttpHeaders(); 
    headers.set("Content-Type", "application/json");
    
    return this.http.post(url, content, { headers: headers, responseType: 'text'});
    

    并在您的API 中接收您的请求正文并反序列化:

    [HttpPost]
    public async Task<object>ConfirmEmail([FromBody] UserInfo userInfo)
    {
    
    }
    
    Public Class UserInfo
    {
      public long userid {get; set;}
      public long code {get; set;}
    }
    

    要在 url 中发送您的数据,您应该使用 http get 方法,如下所示:

    角度:

    let Params = new HttpParams();
    
    Params = Params.append("userid", userid);
    Params = Params.append("code", code);
    
    return this.http.get(url , { params: Params });
    

    网络 API:

    [HttpGet]
    public async Task<object>ConfirmEmail(string userid, string code)
    {
    }
    

    【讨论】:

    • 虽然两个答案都有帮助
    • 嗨哈桑,请对答案进行必要的更改,以便为其他用户一次性获得全图,我会做出答案。
    • like 请求选项对我不起作用,所以我尝试这样 let headers = new HttpHeaders(); headers = headers.set('Content-Type', 'application/json'); return this.http.post(url,data,{ headers: headers, responseType: 'text' });
    • @JaidevKhatri 在我在网络中搜索 requestOption 后在 httpClient 的新版本中不受支持,我建议不要使用它
    • @JaidevKhatri 我添加选项
    猜你喜欢
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多