gpt4 book ai didi

c# - 无法从 Asp.Net Core 2.0 中的 HTTP header 获取 header 值

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:53 30 4
gpt4 key购买 nike

我有一个 MVC Controller ,旨在从 HTTP header 读取用户信息。 header 包含从单点登录 (SiteMinder) 返回的用户信息。 SiteMinder 将用户重定向到公司登录页面,并连同 cookie 和 HTTP header 返回到我的应用程序。 HTTP header 包含用户的信息。我的 Controller 应该获取这些信息并将其显示在导航栏中。

Controller 代码如下:

[HttpGet]
public async Task<IActionResult> GetUser()
{
var person = Request.Headers["HTTP_JHED_UID"].ToString();
if (repository.GetJhedUser(person) != null)
{
var user = await repository.GetUser(person);
var userDto = mapper.Map<User, UserForDisplayDto>(user);
return Ok(userDto);
}
else
{
return null;
}

}

这是我对应的存储库:

public string GetJhedUser(string value)
{
return context.Users.Where(x => x.JHED_ID == value).ToString();
}

public async Task<User> GetUser(string id, bool includeRelated = true)
{
if(!includeRelated)
return await context.Users.FindAsync(id);

return await context.Users
.SingleOrDefaultAsync(s => s.JHED_ID == id);
}

我收到 500 服务器错误。我确信 header 具有这些值。

编辑:这是调试图像。即使我尝试使用“日期”,该值也没什么。请注意,我将我的代码重构为下面@Nkosi 的代码

enter image description here

如何从标题中获取这些用户的信息(在本例中只是用户名),以便我可以在我的 HTML 模板中显示?

最佳答案

不要从 Controller 操作返回 null

在尝试访问 header 之前检查 header 是否确实存在。

重构操作以使其更具防御性。

[HttpGet]
public async Task<IActionResult> GetUser() {
//was the header provided?
var headerValue = Request.Headers["HTTP_JHED_UID"];
if(headerValue.Any() == false) return BadRequest(); //401

//does the person exist?
var person = headerValue.ToString();
if(repository.GetJhedUser(person) == null) return NotFound(); //404

var user = await repository.GetUser(person);
var userDto = mapper.Map<User, UserForDisplayDto>(user);
return Ok(userDto); //200
}

GetJhedUser 的存储库代码也有问题,因为在 linq 表达式上调用 string 并没有按照您的预期进行。

我会进一步建议将 GetJhedUser 重构为它实际检查的内容

public bool JhedUserExists(string value) {
return context.Users.FirstOrDefault(x => x.JHED_ID == value) != null;
}

这导致 Action 看起来像这样

[HttpGet]
public async Task<IActionResult> GetUser() {
//was the header provided?
var headerValue = Request.Headers["HTTP_JHED_UID"];
if(headerValue.Any() == false) return BadRequest(); //401

//does the person exist?
var person = headerValue.ToString();
if(repository.JhedUserExists(person) == false) return NotFound(); //404

var user = await repository.GetUser(person);
var userDto = mapper.Map<User, UserForDisplayDto>(user);
return Ok(userDto); //200
}

关于c# - 无法从 Asp.Net Core 2.0 中的 HTTP header 获取 header 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49612776/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com