2017-09-05 134 views
0

我有以下的控制器功能:如何将授权添加到Response.Header?

[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()); 
    } 

在减速阵营我有这样的:

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(“授权”)就要回来了空。

回答

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()); 
} 
+0

这没有工作,仍然是response.headers空.. – tweetypi

+0

我编辑我的问题把你的答案进去做,我不得不做的事情略有不同(新HttpResponseMessage而不是Request.CreateResponse,它不存在,可能是因为我使用的是asp.net核心...) – tweetypi

+0

@tweetypi好吧,是的,如果你使用.net核心,我的答案需要更新。但是,这个概念是一样的。如果仍然没有在响应中获取标题,请检查响应管道中的某些中间件是否在调用控制器方法后清除标题。检查启动 –

相关问题