如何在控制器构造函数中读取标题

Ala*_*jar 2 asp.net-web-api

是否可以Authorization在我的控制器构造函数中读取标头?如何?这是实现我的目标的最佳解决方案(在控制器构造函数中读取标头值)吗?

以下是我继承接口的类的代码:

public interface IProvider
{
    string SendData(string data);
    //other methods
}

public class FirstProvider : IProvider
{
    private string _url;
    public FirstProvider(string url)
    {
        _url = url;
    }

    public string SendData(string data)
    {
        //send data to First provider website (_url)
        //return result
    }
}

public class SecondProvider : IProvider
{
    //some code
}
Run Code Online (Sandbox Code Playgroud)

以及以下 API 控制器:

public class ProviderController : ApiController
{
    private IProvider _provider;

    public ProviderController()
    {
        //read authorization key from headers (How??)
        string authToken;

        //fetch from database/cache what provider to use based on the authorization key
        var provider = Providers.GetProvider(authToken);
        //Initialize _provider based on the database query result
        if (provider.Name == "a")
        {
            _provider = new FirstProvider(provider.Data);
        }
        else if (provider.Name == "b")
        {
            _provider = new SecondProvider(provider.Data);
        }
        //Other providers will be added in future
    }

    public ProviderController(IProvider provider)
    {
        _provider = provider;
    }

    public IHttpActionResult SendData(string data)
    {
        _provider.SendData(data);
        return Ok();
    }
}
Run Code Online (Sandbox Code Playgroud)

Pad*_*aic 5

你可以用 System.Web.HttpContext.Current.Request.Headers

但是,您应该使用构造函数注入(您似乎已经在使用其他构造函数 public ProviderController(IProvider provider)

您可以使用 IOC 容器根据请求进行条件绑定。请参阅 基于路由数据值的 Ninject 注入