我创建的Web API工作正常,因为我检查过,但问题是当我在asp .net网站上调用web API时,这里是一个调用web API的代码
protected void btn_search_Click(object sender, EventArgs e)
{
HClient.BaseAddress = new Uri("http://localhost:50653/");
HClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
BoiMember obj = new BoiMember();
obj.CustomerId = txt_customerid.Text.Trim();
obj.AadhaarNo = txt_aadharno.Text.Trim();
obj.CustomerName = txt_name.Text.Trim();
obj.AccountNo = txt_accountno.Text.Trim();
obj.MobileNo = txt_mobile.Text.Trim();
obj.branchcd = Session["BranchCode"].ToString();
obj.ZoneCode = Session["ZoneCode"].ToString();
obj.Campcd = "1";
obj.ind = 1;
obj.SourceType = 2;
obj.UserId = Session["UserName"].ToString();
string uri = "api/BoiMember/GetRecord/";
var response = HClient.GetAsync(uri+obj).Result;
if (response.IsSuccessStatusCode)
{
var GetData = response.Content.ReadAsAsync<IEnumerable<BoiMember>>().Result;
GvdRecords.DataSource = GetData;
GvdRecords.DataBind();
}
else
{
}
}
当我在没有参数的情况下调用此Web API时,在名为 BoiMemberController 的API控制器中的位置工作正常,但是当我传递参数时,我得到状态代码404错误未找到。我的网站APIConfig.cs有一个代码
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
答案 0 :(得分:1)
默认执行[some object].ToString()
时,ToString
方法返回对象类型。所以你可能传递一个类似于api/BoiMember/GetRecord/BoiMember
的字符串(不完全限定类型)。您需要使用字符串格式来构建uri。这是一个包含2个参数的基本示例:
var uri = string.Format("api/BoiMember/GetRecord/?customerId={0}&aadhaarNo={1}"
, txt_customerid.Text.Trim()
, txt_aadharno.Text.Trim());
这假设您的参数是查询字符串参数。如果你有一个web api,参数位于url中,那么你需要相应地改变字符串的结构。
如果需要,您还应该进行空检查,如果参数为空,则可能不希望将其发送到api。