【问题标题】:How do I post data in http header from MVC to webapi post method如何将 http 标头中的数据从 MVC 发布到 webapi 发布方法
【发布时间】:2023-03-15 19:41:01
【问题描述】:

我正在创建应用程序原型,其中我试图从 C# MVC 控制器发送请求标头和正文中的数据,并且还创建了 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.VM vm 从 Http 请求正文中获取数据,这意味着 vm 对象正在从 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 项目中获取数据,但我无法获取用户名值。

【问题讨论】:

  • 您需要启用CORS 才能获取您的标题。 Install-Package Microsoft.AspNet.WebApi.Cors 然后在WebApiConfig.cs 下的Register 方法中,添加以下行:EnableCors();。完成后,您可以通过以下方式访问您的标头变量:IEnumerable&lt;string&gt; values = new List&lt;string&gt;(); actionContext.Request.Headers.TryGetValues("username", out values);
  • 你有没有让这个最终工作?
  • 是的,这个解决方案有效。我正在寻找将其标记为解决方案的方法..
  • 我已经发布了这个答案,这样你就可以在最后做必要的事情了。谢谢
  • 感谢您的解决方案。

标签: c# post asp.net-web-api model-view-controller


【解决方案1】:

为了通过headers 获取数据,您需要在您的项目中启用CORS:Install-Package Microsoft.AspNet.WebApi.Cors,然后在WebApiConfig.cs 下的Register 方法中,添加此行:EnableCors();

完成后,您可以通过以下方式访问您的标头变量:

IEnumerable<string> values = new List<string>(); 
actionContext.Request.Headers.TryGetValues("username", out values);

【讨论】:

    【解决方案2】:

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

    HttpActionContext actionContext = this.ActionContext;
    var headers = actionContext.Request.Headers;
    

    【讨论】:

      猜你喜欢
      • 2018-07-12
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      相关资源
      最近更新 更多