【问题标题】:HttpClient requests not recognizing session ASP.NET Core 6 MVC from razorHttpClient 请求无法识别来自剃刀的会话 ASP.NET Core 6 MVC
【发布时间】: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


【解决方案1】:

我实际上已经从 MVC 切换到 MVVM 并且只是注入了所需的服务,以便 blazor 组件可以通过使用独立于控制器 HttpContextAccessor

【讨论】:

    猜你喜欢
    • 2021-04-09
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2012-10-11
    • 1970-01-01
    • 2011-06-09
    相关资源
    最近更新 更多