发送和获取 http headers

Sending and getting http headers

我正在开发 asp.net Web API,并且我有一个使用此 api 的 Web 应用程序。 现在它运行良好,因为我的 api 控制器上没有 [Authorize] 部分。 因此,如果我想保护此 api,我的 Web 应用程序将无法再从 API 获取数据,因为它未被授权。 那么我如何才能将我的 API 生成的令牌发送到我的网络应用程序并允许它获取所需的数据呢? -我正在使用邮递员来测试我的应用程序; -my api return jwt 令牌; - 我不是很熟悉 http headers.

我的消费 Web 应用程序控制器:

        public ActionResult Index()
        {
            IEnumerable<OperatorClass> OperatorObject = null;
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("https://localhost:44304/api/");
            var ApiOpController = client.GetAsync("data");
            client.DefaultRequestHeaders.Add("Authorization", "Bearer"+"");
            ApiOpController.Wait();
            var resultDisplay = ApiOpController.Result;
            if (resultDisplay.IsSuccessStatusCode)
            {
                var readTable = resultDisplay.Content.ReadAsAsync<IList<OperatorClass>>();
                readTable.Wait();
                OperatorObject = readTable.Result;

            }
            else
            {
                OperatorObject = Enumerable.Empty<OperatorClass>();
                ModelState.AddModelError(String.Empty, "No records found");
            }
            return View(OperatorObject);
        }

我的网站API控制器

[Authorize]
[HttpGet]
public IHttpActionResult GetOperators()
{
    SchoolEntity myEntity = new SchoolEntity ();
    IList<OperatorClass> OperatorObject = myEntity.Operator.Include("Operator").Select(x => new OperatorClass()
    {
        name = x.name,
        lastname = x.lastname,
        mobile = x.mobile,
        username = x.username,
        password = x.password
    }).ToList<OperatorClass>();
    return Ok(OperatorObject);
}
string token = <Your token>
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");

这应该适合你。

为了能够使用您的 MVC 控制器,您需要在 returns 时存储令牌。 一种方法是使用 Session.

存储它

假设您使用登录获取令牌,只要您成功登录,您就可以使用会话存储令牌。见下文。

//For brevity after successful login
string myToken = <token returned from api>
HttpContext.Session.SetString("token", myToken);
//other codes

然后你就可以在你所有的控制器中使用它了。

public async Task<ActionResult> Index()
        {
            IEnumerable<OperatorClass> OperatorObject = null;
            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("https://localhost:44304/api/");
            
            //note here
            var token = HttpContext.Session.GetString("token");
            client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
            //ApiOpController.Wait();
            var resultDisplay = await client.GetAsync("data");
            if (resultDisplay.IsSuccessStatusCode)
            {
                var readTable = await resultDisplay.Content.ReadAsAsync<IList<OperatorClass>>();
                //readTable.Wait();
                OperatorObject = readTable;

            }
            else
            {
                OperatorObject = Enumerable.Empty<OperatorClass>();
                ModelState.AddModelError(String.Empty, "No records found");
            }
            return View(OperatorObject);
        }