【发布时间】: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<string> values = new List<string>(); actionContext.Request.Headers.TryGetValues("username", out values); -
你有没有让这个最终工作?
-
是的,这个解决方案有效。我正在寻找将其标记为解决方案的方法..
-
我已经发布了这个答案,这样你就可以在最后做必要的事情了。谢谢
-
感谢您的解决方案。
标签: c# post asp.net-web-api model-view-controller