【发布时间】:2021-10-29 07:35:52
【问题描述】:
我有一个 .NET Web API 控制器,其中包含以下登录方法:
[HttpPost]
[AllowAnonymous]
[Route("api/account/login")]
//Web API Controller method
public virtual async Task<IHttpActionResult> Login(LoginViewModel model)
{
SignInStatus response = await this.SignInManager.PasswordSignInAsync(model.Username, model.Password, model.RememberMe, shouldLockout: true);
if (response == SignInStatus.Success)
return Ok();
return BadRequest();
}
该方法返回一个HttpResponseMessage,其中包含许多标头,包括Set-Cookie。
我需要做的是从一个用 .NET Core 3.1 编写的控制器调用这个 Web API 控制器并返回 HttpResponseMessage 不变。这是我目前拥有的:
[HttpPost]
[Route("[action]")]
//.NET Core Controller method
public async Task<ActionResult> Login(LoginViewModel model)
{
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.PostAsync(WebApiControllerURI, new JsonContent(model));
return Ok(response);
}
但是,在来自 .NET Core 的响应中,Set-Cookie 不是标头,而是包含在响应正文中:
{
"Key": "Set-Cookie",
"Value": [
".AspNet.ApplicationCookie=...."
]
},
当我尝试显式返回 HttpResponseMessage 时得到相同的结果:
[HttpPost]
[Route("[action]")]
public async Task<HttpResponseMessage> Login(LoginViewModel model)
{
HttpClient httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.PostAsync(serverUrl + LoginUri, new JsonContent(model));
return response;
}
如何通过 .NET Core 控制器从 Web API 控制器返回响应并保留 Headers 属性中的标头?
【问题讨论】:
-
您是否尝试直接返回
HttpResponseMessage?示例:c-sharpcorner.com/UploadFile/dacca2/… -
@Serhii 是的,我做到了。我更新了我的问题,表明我尝试明确返回
HttpResponseMessage。 -
HttpClient是什么?它是您构建的吗?你能给我们看一下代码吗?当 HTTPClient 收到它们时,您可以将这些 Header 添加到HttpResponseMessage。 -
@Alen.Toma 这是我正在使用的 System.Net.Http.HttpClient 类。
-
另外,您可以尝试创建自定义 IActionResult:stackoverflow.com/a/54137811/8978576
标签: c# http asp.net-web-api