如何使用MVC控制器使用多个参数化的Web API

时间:2018-12-14 10:22:36

标签: c# asp.net asp.net-mvc asp.net-web-api model-view-controller

我正在使用需要两个参数 MVC控制器使用网络API 。根据参数,数据将以Json格式返回。如何使用具有两个参数的api? api-url:http://www.example.com/apiname/methodname/ 参数: 参数1 param2

api键详细信息: api键:x-api键 api键值:apikeyvalue

示例:http://www.example.com/apiname/methodname/param1/param2

using (var client = new HttpClient())
        {
client.BaseAddress = new Uri(@"apiurl");  

client.DefaultRequestHeaders.Clear();

            client.DefaultRequestHeaders.Add("x-api-key", "apikeyvalue");

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            //HTTP GET
            var responseTask = client.GetAsync("GetAttendances");

            responseTask.Wait();



            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsAsync<IEnumerable<MonitoringCallsViewModel>>();
                readTask.Wait();
            }
            else //web api sent error response 
            {
                //log response status here..

                ModelState.AddModelError(string.Empty, "Server error. Please contact administrator.");
            }
}

}

1 个答案:

答案 0 :(得分:1)

我从您的解释中没有得到太多详细信息,但是您可以通过两种方式使用api端点。第一个是api通过查询获取参数,您可以将这些变量设置为查询(请求url),如下所示。

    public static string YourUrlSetterFunc(string baseUri, int id, int categoryId)
    {
            return $"{baseUri}/endpoint-route?firstParam={firstParam}&secondPram={secondPram}";
    }

或者您可以设置那些不是从url获取的变量,而是通过适当的HttpClient方法调用FormData。示例如下所示。

var serializeObject = _jsonSerializer.Serialize(YourClassThatHoldsParams);
using (var requestContent = new StringContent(serializeObject, System.Text.Encoding.UTF8, "application/json"))
            {
                using (var responseMessage = await PostAsync(requestUri, requestContent))
                {
                    response = _jsonSerializer.DeSerialize<TV>(await responseMessage.Content.ReadAsStringAsync());
                }
            }

通过这种方式,您可以将JSON响应读取为字符串,然后将其反序列化为想要的对象。希望这能解决您的问题。