asp.net 从c#调用带有多个参数的web api中的get方法

yb3bgrhw  于 2022-11-19  发布在  .NET
关注(0)|答案(2)|浏览(309)

我正在尝试调用Web API中的get方法,该方法将从客户端获取2个参数。用户将在此处输入用户名和密码,并将其发送到服务器进行验证。
这是我的控制器Vendor(我在MVC中创建的)和它的Web 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中。我必须将它们转换成JSON还是直接发送。我不知道如何调用这个get方法。
我在客户端使用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;
    }

}

但是代码不起作用,之后的代码等待客户端,GetAsync没有执行,怎么解决?

2ul0zpep

2ul0zpep1#

您必须将参数传递到查询字符串中,如下所示,

http://localhost:49996/api/Vendor?uname=CharanGhate&pass=xyz

http://localhost:49996/是你的应用程序的基本url。你必须在这里使用http get方法。你可以直接从浏览器调用get type方法,也可以从 Postman ,fiddler等调用

z5btuh9x

z5btuh9x2#

您已经正确设置了所有内容,只需要向该url发出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/

相关问题