首页 > 解决方案 > 如何使用 mvc 控制器使用多个参数化的 web api

问题描述

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

api-key 详细信息: api-key:x-api-key api-key 值: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.");
            }
}

}

标签: c#asp.netasp.net-mvcasp.net-web-apimodel-view-controller

解决方案


我从您的解释中没有得到太多细节,但您可以通过 2 种方式使用 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 响应读取为字符串,然后将其反序列化为您想要的对象。希望这能解决您的问题。


推荐阅读