gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:06 24 4
gpt4 key购买 nike

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

关于c# - 使用 HttpWebrequest/HttpClient 调用 WebApi 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34589329/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com