C# 找不到web api操作
控制器中有我们的主api,它有两个参数,但问题是,即使我们将这些参数发送到api路径,也会出现一个错误,即 没有匹配的操作或方法。因此,我们不知道如何成功调用我们的主api,该api在响应对象中返回数据C# 找不到web api操作,c#,asp.net-web-api,C#,Asp.net Web Api,控制器中有我们的主api,它有两个参数,但问题是,即使我们将这些参数发送到api路径,也会出现一个错误,即 没有匹配的操作或方法。因此,我们不知道如何成功调用我们的主api,该api在响应对象中返回数据 RestService.BaseUrl = baseUrl; var client = RestService.Instance; var request = RestService.GetRestRequest("Payment/SyncWithIrd",
RestService.BaseUrl = baseUrl;
var client = RestService.Instance;
var request = RestService.GetRestRequest("Payment/SyncWithIrd",
Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddHeader("application/json; charset=utf-8",
JsonConvert.SerializeObject(bmodel), ParameterType.RequestBody);
request.AddHeader("application/json; charset=utf-8",
JsonConvert.SerializeObject(mode)`enter code here`,
parameterType.RequestBody);
request.AddHeader("Content-Type", "application/json;charset=utf-8");
var response = client.Execute(request);
var value = response.Content;
return value;
我在代码中看到一些AddHeader,但没有一个AddBody。动词Post通常有身体部分。尝试在方法签名处添加[FromBody],如
[HttpPost]
public HttpResponseMessage SyncWithIrd([FromBody]BillViewModel model, [FromBody]string mode)
然后移除
request.AddHeader("application/json; charset=utf-8", JsonConvert.SerializeObject(bmodel), ParameterType.RequestBody);
request.AddHeader("application/json; charset=utf-8", JsonConvert.SerializeObject(mode)`enter code here`, parameterType.RequestBody);
然后添加AddHeader
request.AddBody(new { model = JsonConvert.SerializeObject(bmodel) }, new { mode = JsonConvert.SerializeObject(mode) });
请注意,在调用post动词时始终使用身体部位
编辑
将SyncWithIrd的参数字符串模式放在BillViewModel中,然后重新构造方法签名,如下所示:
[HttpPost]
public HttpResponseMessage SyncWithIrd([FromBody]BillViewModel model)
那么AddBody必须是
request.AddBody(new { model = bmodel } });
注:我使用类似的代码如下:
var restClient = new RestClient(model.ApiUrl);
var restRequest = new RestRequest("api/auth/createuser", Method.POST);
restRequest.RequestFormat = DataFormat.Json;
restRequest.AddBody(new {
FullName = model.FullName,
Email = model.Email,
Username = model.UserName,
Password = model.Password
});
var restResponse = restClient.Execute(restRequest);
我希望它能有所帮助。lmk请您在上查看信息并重新回答您的问题好吗?谢谢!!我们已正确编辑了我们的问题。包括控制器方法的代码。[System.Web.Http.HttpPost]公共HttpResponseMessage SyncWithIrdBillViewModel,字符串模式{var result=\u servicePayment.Sync\u Irdmodel,mode;if result==success{返回新的HttpResponseMessageHttpStatusCode.OK;}否则{返回新的HttpResponseMessageHttpStatusCode.BadRequest;}}通过var response=client.Executerequest调用PaymentController时,未在PaymentController中找到此方法;请建议我们。根据您的建议编辑代码后,最后一行出现两个错误:request.AddBodynew{model=JsonConvert.SerializeObjectbmodel},new{mode=JsonConvert.SerializeObjectmode};与RestSharp.restRequest.AddBodyobject最匹配的重载方法,string有一些无效参数不能从“AnonymousType1”转换为“string”,请建议我们使用