我需要从 C# 代码 .Net 4.5 对 Controller 进行 webApi 调用
我的 Api Controller 看起来像:
[Route("api/GetData/{id}/{createDate}")]
public List<DataModel> GetData(int id, DateTime createDate)
{
var dataDb = new DataDb(SqlConnectionString);
var result = dataDb .GetSalesData(id, createDate);
return result;
}
如何使用 C# 调用上述 Controller , 我不想在 url 中传递参数,例如“http://wks337:8989/api/GetData/1/2013-06-11/12337 ” 而不是将其添加到 header /正文(任何最佳方法)而不是 Uri。
我尝试将 HttpWebRequest 用作:
string serviceUrl = url + methodName + "//";
dynamic parameterObj = new ExpandoObject();
parameterObj.id= definitionId;
parameterObj.createDate= jobDate;
string strParameter = JsonConvert.SerializeObject(parameterObj);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
request.ContentType = "application/json; charset=utf-8";
request.Method = "POST";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(parameters);
streamWriter.Flush();
streamWriter.Close();
}
var httpResponse = (HttpWebResponse)request.GetResponse();
但它总是让我出现 404 错误。 我知道我在做某事或完全错了,谁能指导我找到正确的代码。
我试过谷歌,但示例建议在我不想要的 Url 中传递参数。
请您参考如下方法:
这里的问题是您的 Controller 方法是 Get[HttpGet] 方法并且在您的调用代码中
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceUrl);
request.ContentType = "application/json; charset=utf-8";
request.Method = "POST";
您正在发出 "POST" 请求。如果您希望参数进入请求正文而不是 url。您需要制作您的操作方法 [HttpPost]。首先创建一个模型类,它将您的参数捆绑为
public class GetDataParameters
{
Public int Id {get; set;},
public DateTime createDate {get; set;}
}
然后在 Controller 中
[Route("api/GetData/")]
[HttpPost]
public List<DataModel> GetData([FromBody] getDataParameters)
{
var dataDb = new DataDb(SqlConnectionString);
var result = dataDb .GetSalesData(getDataParameters.id, getDataParameters.createDate);
return result;
}
现在您应该能够通过在正文中传递参数来发出发布请求。另外作为一个建议,不要自己编写所有代码来发出请求,请查看 HastyApi。甚至更好 RestSharp
