【问题标题】:Web api: 400 bad requestWeb api: 400 错误请求
【发布时间】:2020-11-13 12:41:05
【问题描述】:

我有一个可以正常工作的 web api;我已经用 Postman 对其进行了测试。但是,当从客户端应用程序进行 api 调用时,我收到 400 错误。我不确定这里发生了什么。使用 Blazor 服务器端 这是 api 控制器

[HttpPost]

    public ActionResult AddEvent([FromBody] BtnData json)
    {



        // BtnData listObj = Newtonsoft.Json.JsonConvert.DeserializeObject<BtnData>(json.ToString());

        string Eve = json.Eve.ToString();//listObj.Eve;
        string DogName = json.DogName.ToString(); //listObj.DogName;
        string time = json.Time.ToString(); //listObj.Time;
        string userid = json.Userid.ToString(); //listObj.Userid;
        string familyid = json.Familyid; 

}

这是来自客户端应用程序中 Blazor 组件页面的 api 调用

<div class="btn-group-sm">
    <Button class="btn-outline-light btn-sm" @onclick="@Wizz">Wizz</Button>
    <Button class="btn-outline-light btn-sm" @onclick="@Poop">poop </Button>
    <Button class="btn-outline-light btn-sm" @onclick="@Walk">Walk </Button>
    <Button class="btn-outline-light btn-sm" @onclick="@Fetch">Fetch</Button>
    <Button class="btn-outline-light btn-sm" @onclick="@Feed">Feed</Button>
    <Button class="btn-outline-light btn-sm" @onclick="@Bathe">Bathe</Button>



</div>
<br />
<div class="text-center">
    <button class=" btn-outline-success btn-lg" @onclick="@redirect">Save</button>

</div>

@code {

    string id = "1006949";
    string famid = "1006949";
    public void redirect()
    {
        Nav.NavigateTo("Events", true);
        // var httpcontent = new StringContent(json, System.Text.Encoding.UTF8, "application/json");

    }
    public async Task Wizz()
    {

        BtnData Events_ = new BtnData();
        Events_.DogName = _Events.TellDog().ToString();
        Events_.Time = DateTime.Now.ToString("MM/dd hh:mm:ss tt");
        Events_.Eve = "wizz";
        Events_.Familyid = famid.ToString();
        Events_.Userid = id.ToString();

        var json = Newtonsoft.Json.JsonConvert.SerializeObject(Events_);

        var client = http.CreateClient();
        await client.PostJsonAsync("https://apidoggo.azurewebsites.net/api/Events", json);
        //string userId = "1006949";


    }

【问题讨论】:

    标签: c# json entity-framework asp.net-core blazor


    【解决方案1】:

    400 表示错误请求。

    我注意到您现在在服务器上使用默认的 JSon 序列化程序 (System.Text),但在客户端上使用 NewtonSoft。

    所以试试这个,只是为了消除 JSon 的不兼容性:

    // var json = Newtonsoft.Json.JsonConvert.SerializeObject(Events_);
    
       var client = http.CreateClient();
    // await client.PostJsonAsync("https://apidoggo.azurewebsites.net/api/Events", json);
       await client.PostAsJsonAsync("https://apidoggo.azurewebsites.net/api/Events", Events_);
    

    您可能需要为扩展方法添加using System.Net.Http.Json;

    【讨论】:

    • 我刚刚意识到我自己会回来传递同样的信息!感谢您的洞察力!
    • 很高兴找到@Henk
    • @kjenn31 - 不要忘记再次删除 Newtonsoft 软件包。
    【解决方案2】:

    您在此处粘贴的代码是否正确?外壳不同:

    时间-时间

    Familyid - 家庭ID

    用户名 - 用户名

    【讨论】:

    • 感谢您的回答,web api 控制器在不同的项目中。
    • 是的,但是两个项目中的对象“BtnData”应该相同。
    猜你喜欢
    • 2019-06-21
    • 2014-04-05
    • 1970-01-01
    • 2018-06-07
    • 2022-01-04
    • 2011-06-18
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多