为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕莱坞森 2022-11-21 17:03:48
我正在创建应用程序原型,我正在尝试从 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/valuespublic 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 项目中获取数据,但我无法获取用户名值。
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

为了通过 获取数据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);


查看完整回答
反对 回复 2022-11-21
?
慕村225694

TA贡献1880条经验 获得超4个赞

您可以使用该 Web API 方法中的以下行将所有标头传递给 Web API 的方法:


HttpActionContext actionContext = this.ActionContext;

var headers = actionContext.Request.Headers;


查看完整回答
反对 回复 2022-11-21
  • 2 回答
  • 0 关注
  • 62 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号