我有一个工作正常的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";
}
400表示请求不正确。
我注意到您现在在服务器上使用默认的JSon-serizalizer(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;
。
粘贴在此处的代码正确吗?外壳不同于:
时间-时间
Familyid-Familyid
Userid-Userid