Web api: 400 错误请求

Posted

技术标签:

【中文标题】Web api: 400 错误请求【英文标题】:Web api: 400 bad request 【发布时间】: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";


    

【问题讨论】:

【参考方案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”应该相同。

以上是关于Web api: 400 错误请求的主要内容,如果未能解决你的问题,请参考以下文章

spotify-web-api-node:authorizationCodeGrant() 给出 400 - 错误请求

使用来自 Angular JS 的 Web API 令牌身份验证时出现错误请求 (400)

spotify-web-api-node:authorizationCodeGrant()给出400 - 错误请求

TypeScript POST API 请求错误 400 - 错误请求

Azure DevOps 发布 Api 400 错误请求错误

为啥我在尝试使用 fetch 连接 Api 时收到“错误请求”错误 400?