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 - 错误请求