我试图在web api中调用get方法,它将从客户端获取2个参数。在这里用户将输入用户名&密码&它将被发送到服务器进行身份验证。
这是我的控制器供应商(我在mvc中创建的)&它的网络api方法
[Route("api/Vendor/{uname}/{pass}")]
public int Get(string uname, string pass)
{
Boolean exists = false;
int id = 0;
SqlConnection con = new SqlConnection(" Data Source = DELL; Initial Catalog = EVENT; Integrated Security = True");
con.Open();
using (SqlCommand cmd = new SqlCommand("SELECT Count([UserName]) As Usercount FROM [dbo].[AllUser] WHERE [UserName] = '" + uname + "' AND [Password] = '" + pass + "' ", con))
{
exists = (int)cmd.ExecuteScalar() > 0;
}
if (exists)
{
SqlCommand cmd = new SqlCommand("SELECT [Id] FROM [dbo].[AllUser] WHERE [UserName] = '" + uname + "' AND [Password] = '" + pass + "' ", con);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
id = Convert.ToInt16(ds.Tables[0].Rows[0][0]);
}
return id;
}
现在我被困在如何向这个api发送2个参数。我是否必须将它们转换为JSON,或者我可以直接发送它们。我不知道怎么称呼这个得到了.h
我在客户端使用c#和android。请给我一些关于如何从双方调用此方法的建议。
感谢。
实际上我使用以下代码更新了我的c#客户端
static async Task<int> ValidateVendorAsync(string uname, string pass)
{
int id = 0;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost:56908/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
HttpResponseMessage response = await client.GetAsync("api/Vendor/" + uname + "/" + pass);
if (response.IsSuccessStatusCode)
{
System.Diagnostics.Debug.WriteLine("Con");
}
else
{
System.Diagnostics.Debug.WriteLine("Connection Error");
}
return id;
}
}
但代码不起作用。 await client.GetAsync 之后的代码未执行。 怎么解决这个问题?
答案 0 :(得分:0)
您已正确设置所有内容,只需向该网址发出HTTP GET请求:http://baseurl/api/Vendor/myusername/mypassword
路由中传递的参数不需要序列化。如果他们没有在路线中取消,那么你必须通过序列化版本。在这种情况下,它们将作为查询字符串的一部分附加。
所以请使用您的HttpClient示例:
var client = new HttpClient() //if used frequently, don't dispose this guy, make him a singleton if you can (see link below)
String uname = UserName.Text;
String pass = Password.Text;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
var result = await client.GetAsync("http://localhost:56908/api/vendor/" + uname + "/" + pass);
https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/
答案 1 :(得分:0)
您必须将参数传递给查询字符串,如下所示
http://localhost:49996/api/Vendor?uname=CharanGhate&pass=xyz
http://localhost:49996/是您应用的基本网址。你必须在这里使用http get方法。您也可以直接从浏览器调用get类型方法,也可以从postman,fiddler等调用get类型