Как получить IP-адрес пользователя в модели API в ASP.NET Core 2.1? - PullRequest
0 голосов
/ 07 октября 2018

У меня нет проблем с получением IP-адреса пользователя во время выполнения кода в контроллере веб-API, но в модели я фактически не могу использовать:

this.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();

Причина, по которой мне нужен пользовательский IP, потому что мне нуженгеолокации своей страны путем сравнения ее с помощью данных, полученных от стороннего поставщика.Я мог бы сделать это на этапе контроллера веб-API, но лучше иметь модель, таким образом я могу создать собственную аннотацию для своей работы, поскольку мне потребуется повторно использовать код в нескольких моделях.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы разрушаете ТВЕРДЫЕ здесь.Вашей модели неуместно знать о HttpContext или о том, как извлечь удаленный IP-адрес из этого.Логика, которую вы хотите инкапсулировать в вашей модели, просто нуждается в IP-адресе, поэтому , что - это то, что вы должны указать.Это может быть предоставлено либо в конструкторе класса вашей модели, либо просто в качестве параметра для конкретного метода (ов), который должен его использовать.Например, создайте метод, подобный следующему:

public void GeolocateByIP(string ip)
{
    // do geolocation
}

В своем действии контроллера вы просто делаете что-то вроде:

model.GeolocateByIP(HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString());
0 голосов
/ 08 октября 2018

Вы можете получить доступ к HttpContext, введя IHttpContextAccesor в ядро ​​asp.net.

public class ModelClass
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public ModelClass(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...