如何将 http 标头中的数据从 MVC 发布到 webapi 发布方法

我正在创建应用程序原型,我正在尝试从 C# MVC 控制器发送请求标头和正文中的数据,还创建了 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("username","test"); 在 MVC 项目中传递标头数据和


在 WEB API 项目中获取数据,但我无法获取用户名值。


慕莱坞森
浏览 63回答 2
2回答

UYOU

为了通过 获取数据headers,您需要启用 CORS:Install-Package Microsoft.AspNet.WebApi.Cors在您的项目中,然后在您的Register方法中WebApiConfig.cs,添加以下行:EnableCors();。完成后,您可以访问标头变量:IEnumerable<string> values = new List<string>();&nbsp;actionContext.Request.Headers.TryGetValues("username", out values);

慕村225694

您可以使用该 Web API 方法中的以下行将所有标头传递给 Web API 的方法:HttpActionContext actionContext = this.ActionContext;var headers = actionContext.Request.Headers;
打开App,查看更多内容
随时随地看视频慕课网APP