Как опубликовать данные в заголовке http из MVC в методе публикации в Webapi? - PullRequest
0 голосов
/ 01 апреля 2019

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

Мой код выглядит так:

Код проекта 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.VM vm получает данные из тела запроса Http, что означает, что объект vm получает данные из тела HTTP-запроса. Я могу получить тело запроса. Я не могу понять, как передать данные в заголовке из контроллера MVC (я хочу передать данные JSON) и получить данные в методе WEB Api post?

Я использовал client.DefaultRequestHeaders.Add ("имя пользователя", "тест"); в проекте MVC для передачи данных заголовка и

HttpRequestMessage re = new HttpRequestMessage();
              var headers = re.Headers;
              string token = "";

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

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

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Чтобы получить данные через headers, вам нужно включить CORS: Install-Package Microsoft.AspNet.WebApi.Cors в вашем проекте, а затем в вашем методе Register в WebApiConfig.cs, добавить эту строку: EnableCors();.

Когда вы закончите, вы можете получить доступ к вашей переменной заголовка как:

IEnumerable<string> values = new List<string>(); 
actionContext.Request.Headers.TryGetValues("username", out values);
0 голосов
/ 01 апреля 2019

Вы можете получить все заголовки, передаваемые методу веб-API, используя следующие строки внутри этого метода веб-API:

HttpActionContext actionContext = this.ActionContext;
var headers = actionContext.Request.Headers;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...