.Net Core - Использование фильтра авторизации для проверки переменной из запроса и ее изменения - PullRequest
0 голосов
/ 15 октября 2019

В приведенном ниже коде мне нужно прочитать значение переменной из запроса и изменить объект запроса.

public class ApiAuthFilter : AuthorizeAttribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        // 1. read request object from context

        // 2. modify the value

        // 3. add the value and update request

    }
}

Ответы [ 2 ]

0 голосов
/ 16 октября 2019

Вы можете изменить объект запроса, как показано ниже:

1.User:

public class User
{  
    public int Id { get; set; }
    public string Name { get; set; }
}

2.ApiAuthFilter:

public class ApiAuthFilter : Attribute, IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        //1.read request object from context
        var request = context.HttpContext.Request;
        request.EnableRewind();
        request.Body.Position = 0;

        using (var reader = new StreamReader(request.Body))
        {
            //2.modify the value
            var decriptedFromJavascript = "{ \"Id\":2,\"Name\":\"UR123456\"}"; 
            byte[] bytes = Encoding.ASCII.GetBytes(decriptedFromJavascript);
            //3. add the value and update request
            request.Body = new MemoryStream(bytes); 
        }
    }
}

3.Action:

[HttpPost("[action]")]
[ApiAuthFilter]
public User GetUser([FromBody]User user)
{
    return user;
}

4.Результат: enter image description here

0 голосов
/ 15 октября 2019
public void OnAuthorization(AuthorizationFilterContext context)
    {
        string authHeader = context.HttpContext.Request.Headers["Authorization"];

        context.HttpContext.Request.Headers["Authorization"] = "value";
    }
...