如何从控制器正确访问 HTTP 标头? (.NET 网络应用程序)

Posted

技术标签:

【中文标题】如何从控制器正确访问 HTTP 标头? (.NET 网络应用程序)【英文标题】:How to properly access HTTP Headers from your controller? (.NET Web App) 【发布时间】:2021-10-27 14:45:09 【问题描述】:

我目前正在开发一个 .NET Web 应用程序 (MVC),它的设计目的是让用户在另一个 Web 应用程序中登录该应用程序,然后 IIS 将控制权传递给我的 Web 应用程序(我称之为 SP)。然后 SP 需要访问传递给它的包含从登录页面传递的用户信息的标题。然后使用这些字段将用户添加到数据库以进行日志记录。此行为在 Web 应用主控制器的构造函数中调用:HomeController,因为我希望它在用户访问页面时运行。

这是我当前的实现:

public HomeController()

    try
    
        string ID = Request.Headers.Get("CN userName");

        if (ID.Length > 3)
        
            try
            
                ID = ID.Substring(3, 3);
            
            catch
            
                ID = ID.Substring(0, 3);
            
        
        string firstName = Request.Headers.Get("X-First Name");
        string lastName = Request.Headers.Get("X-Last Name");
        string email = Request.Headers.Get("X-Mail");
        currUser = new User(ID, firstName, lastName, email, "");            
    catch (Exception e)
    
        currUser = new User(/*Create Default User*/);
    

User 构造函数处理创建后管理用户所需的方法。但是,当它尝试访问任何标头时,当前部署时会引发错误。我没有很多使用标头的经验,所以我花了几个小时试图在网上找到解决方案,但我没有尝试完成我需要的工作。在解决此问题和正确实施此行为方面,我将不胜感激。

【问题讨论】:

实际抛出的异常是什么?通常你可以使用Request.Headers["Header_Name"] 来访问headers 集合。 【参考方案1】:

我认为您不应该在控制器构造函数中执行此操作(也不确定它是否安全)。

它可能更适合Filter,这将使其更容易重复使用。

【讨论】:

以上是关于如何从控制器正确访问 HTTP 标头? (.NET 网络应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 HTTP 请求中正确使用缓存控制标头

如何访问 Spring MVC REST 控制器中的 HTTP 标头信息?

如何避免“访问控制允许标头不允许请求标头字段授权”从本地驱动器运行 JavaScript? [复制]

weblogichost头攻击配置

如何从标头中正确获取 jwt 令牌并将其与 express 一起使用

SEC7123:访问控制允许标头列表中不存在请求标头密钥