【发布时间】:2022-02-28 11:05:43
【问题描述】:
不知道在哪里看,我想要完成的是以下
我有一个带有如下控制器的 ASP.NET Core 6 MVC 应用程序:
public class MyController: Controller
{
[HttpPost]
public async Task<IActionResult> SaveNameToDataBase(NameModel nameModel)
{
if (CheckSessionIfUserIsLoggedIn())
{
PostComment(nameModel)
return JsonStringThatShowsSuccess
}
else
{
return JsonStringThatShowsAnError
}
}
}
如果我从浏览器调用该方法,它可以正常工作,但是,我使用 Blazor 组件来防止整个页面重新加载以发布
@code {
[Parameter]
public string NewNameToPut { get; set; } = string.Empty;
[Parameter]
public string NewNameExtraParam { get; set; } = string.Empty;
// On click event
private async Task CreateRootComment()
{
NameModel nameModel = new NameModel(NewNameToPut);
// update namemmodel
...
// Set up request
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, $"{NavigationManager.BaseUri}MyController/SaveNameToDataBase");
@* Add body to request *@
request.Content = new StringContent(
JsonConvert.SerializeObject(nameModel)
);
request.Headers.Add("Accept", "application/json");
request.Headers.TryAddWithoutValidation("Content-Type", "application/json");
request.Headers.TryAddWithoutValidation("Accept", " text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng");
// requestMessage.Headers.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
request.Headers.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36");
request.Headers.TryAddWithoutValidation("Accept-Language", "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7,zu;q=0.6");
HttpClient client = ClientFactory.CreateClient();
HttpResponseMessage response = await client.SendAsync(request);
if (response.IsSuccessStatusCode)
{
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
}
}
请求已成功发送并触发,但无法识别会话变量。会话包含一个键值,当用户登录时设置为 true,由于某种原因,在 HttpClient 发出请求时找不到它,但是当浏览器通过鼠标单击、表单提交或 JS 运行时发出请求时找到它.
也许我在这里错过了一些documentation?任何文章或指南也很有帮助
【问题讨论】:
-
我想this 回答了我的问题,所以我猜没有解决方案:/
标签: c# asp.net-core-mvc blazor dotnet-httpclient .net-6.0