Как вызвать метод Get с помощью Send FromBody из приложения Windows - PullRequest
0 голосов
/ 11 июня 2019

У меня есть API, который принимает метод [FromBody] в методе get. Итак, как я могу вызвать этот метод Get

Мой API -

     [BearerAuth]
     [HttpGet]
     public Dictionary<long, string> GetEmployees([FromBody] Employee obj)
    {
        Dictionary<long, string> dic = new Dictionary<long, string>();

        //Some Implemenation

        return dic;
    }

Теперь я пытаюсь вызвать его из приложения Windows

            using (WebClient webRequest = new WebClient())
            {
                Employee emp = new Employee { EmpId = 1, Name = "Mohan", Gender = "Male", MobileNo = "9560498289", Salary = 50000 };
                string url = APIUrl_2 + "/APITest/GetMethod_FromBody";

                //string JsonString = JsonConvert.SerializeObject(emp);
                //ASCIIEncoding encoding = new ASCIIEncoding();
                //byte[] data = encoding.GetBytes(JsonString);

                WebRequest request = WebRequest.Create(url);
                request.Method = "GET";
                request.Headers["Authorization"] = "Bearer " + "AuthKey";
                using (WebResponse response = request.GetResponse())
                {

                }
              }

Пожалуйста, кто-нибудь может мне помочь отправить данные сотрудника в FromBody, он вызывается, но сотрудник пуст.

Я должен сделать это только методом get.

Заранее спасибо

1 Ответ

0 голосов
/ 11 июня 2019
Атрибут

[FromBody] нельзя использовать для декорированного метода [HttpGet]. Есть две возможные модификации, которые вы можете сделать, чтобы исправить свой код:

  1. Первый вариант: преобразовать ваш метод в POST и отправить объект сотрудника в теле запроса:

     [BearerAuth]
     [HttpPost]
     public Dictionary<long, string> GetEmployees([FromBody] Employee obj)
     {
        Dictionary<long, string> dic = new Dictionary<long, string>();
    
        //Some Implemenation
    
        return dic;
     }
    

И ваш код клиента:

     using (WebClient webClient = new WebClient())
     {
        //add authorization
        Employee emp = new Employee { EmpId = 1, Name = "Mohan", Gender = "Male", MobileNo = "9560498289", Salary = 50000 };
        string url = APIUrl_2 + "/APITest/GetMethod_FromBody";

        string jsonString = JsonConvert.SerializeObject(emp);

        string response = webClient.UploadString(url, jsonString);
     }
  1. Второй вариант: преобразовать [FromBody] в [FromUri] и отправить объект сотрудника в виде строки запроса

     [BearerAuth]
     [HttpGet]
     public Dictionary<long, string> GetEmployees([FromGet] Employee obj)
     {
        Dictionary<long, string> dic = new Dictionary<long, string>();
    
        //Some Implemenation
    
        return dic;
     }
    

Соответствующая часть клиента:

webClient.QueryString.Add("EmptId", emp.EmpId);
webClient.QueryString.Add("Name", emp.Name);
webClient.QueryString.Add("Gender", emp.Gender);
...
string response = webClient.DownloadString(url);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...