Codes DeCodes Ответов: 1

Как опубликовать данные в HTTP-заголовке MVC в веб-API метод POST


Я создаю прототип приложения, в котором я пытаюсь отправить данные в заголовке и теле запроса из контроллера C# MVC, а также создал действие Post project web api для обработки запроса.

Мой код звучит примерно так::

Код проекта MVC для отправки запроса:

public class HomeController : Controller
   {
       public async Task<ActionResult> Index()
       {
           VM VM = new VM();
           VM.Name = " TEST Name";
           VM.Address =  " TEST Address ";

           using (var client = new HttpClient())
           {
               client.BaseAddress = new Uri("http://localhost:58297");
               client.DefaultRequestHeaders.Accept.Clear();
               client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

               client.DefaultRequestHeaders.Add("username","test");

               var json = JsonConvert.SerializeObject(VM);
               var content = new StringContent(json, Encoding.UTF8, "application/json");
               var result1 = await client.PostAsync("api/Values/Post", content);
           }

           return View();
       }
   }






Мой код в проекте WEB API :

// POST api/values
public IHttpActionResult Post([FromBody]API.VM vm)
{
    try
    {
        HttpRequestMessage re = new HttpRequestMessage();

        StreamWriter sw = new StreamWriter(@"E:\Apple\txt.log", false);

        var headers = re.Headers;
        string token = "";

        if (headers.Contains("username"))
        {
            token = headers.GetValues("username").First();
        }

        sw.WriteLine("From header" + token);

        sw.WriteLine("From BODY" + vm.Name);
        sw.WriteLine("From BODY" + vm.Address);
        sw.WriteLine("Line2");
        sw.Close();
        return Ok("Success");
    }
    catch (Exception ex)
    {
        return InternalServerError(ex);
    }
}



Как я понял это [FromBody]интерфейс API.ВМ ВМ получает данные из тела запроса HTTP, который означает, что объект виртуальной машины получаю данные из тела запроса HTTP.Я могу получить тело запроса. Я не могу понять, как передать данные в заголовке из контроллера MVC (я хочу передать данные JSON) и получить данные в методе WEB Api post?

Что я уже пробовал:

Я уже использовал
client.DefaultRequestHeaders.Add("username","test");
в проекте MVC для передачи данных заголовка и
HttpRequestMessage re = new HttpRequestMessage();
              var headers = re.Headers;
              string token = "";

              if (headers.Contains("username"))
              {
                  token = headers.GetValues("username").First();
              }


в проекте WEB API для получения данных, но я не могу получить значение имени пользователя,

1 Ответов

Рейтинг:
4

Bohdan Stupak

Нет необходимости создавать новый объект с помощью

HttpRequestMessage re = new HttpRequestMessage();

использовать статические Request вместо
Request.Headers.TryGetValue("username", out var test);