Skip to main content
 首页 » 编程设计

c#之使用 HttpWebrequest/HttpClient 调用 WebApi 2

2024年01月31日25zhengyun_ustc

我需要从 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