【问题标题】:How to add authorization to Response.Header?如何向 Response.Header 添加授权?
【发布时间】:2018-02-14 03:48:38
【问题描述】:

我有以下控制器功能:

    [HttpGet("[action]")]
    public async Task<HttpResponseMessage> Login(string username, string password)
    {
        var user = await _userManager.FindByNameAsync(username);
        var res = await _signInManager.CheckPasswordSignInAsync(user, password, false);

        if (res.Succeeded)
        {
            var msg = new HttpResponseMessage(HttpStatusCode.OK);
            msg.Headers.Add("Authorization", JwtManager.GenerateToken(username));
            return msg;
        }
        else
            return new HttpResponseMessage(HttpStatusCode.BadRequest);// Request.CreateResponse(HttpStatusCode.BadRequest, new object());
    }

在 React 的 reducer 中我有这个:

let fetchTask = fetch('http://localhost:25565/api/mediaengine/login?username=' + userName + '&password=' + password)

            .then(response => {
                var k = response.headers.get("Authorization");
                var l = 0;
            })
            .catch(e => {
            });
        addTask(fetchTask);

由于某种原因 response.headers.get("Authorization") 返回 null..

【问题讨论】:

    标签: asp.net json reactjs asp.net-authorization


    【解决方案1】:

    您应该从 api 返回响应。这可以通过 HttpResponseMessage 类来完成

    [HttpGet("[action]")]
    public async Task<HttpResponseMessage> Login(string username, string password)
    {
        var user = await _userManager.FindByNameAsync(username);
        var res = await _signInManager.CheckPasswordSignInAsync(user, password, false);
    
        if(res.Succeeded)
        {
            var response = Request.CreateResponse(HttpStatusCode.OK, new object());
            response.Headers.Add("Authorization", JwtManager.GenerateToken(username));
            return response;
        }else
            return Request.CreateResponse(HttpStatusCode.BadRequest, new object());
    }
    

    【讨论】:

    • 我编辑了我的问题以考虑到您的回答,我不得不做一些稍微不同的事情(新的 HttpResponseMessage 而不是 Request.CreateResponse 不存在,可能是因为我使用的是 asp.net 核心...)
    • @tweetypi 好的,是的,如果您使用的是 .net core,我的答案需要更新。但是,概念是一样的。如果您仍然没有在响应中获得标头,请检查您的响应管道中的某些中间件是否在调用控制器方法后清除标头。签入启动
    猜你喜欢
    • 2018-04-03
    • 2022-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 2020-03-29
    相关资源
    最近更新 更多