UriHelper как получить путь к производственному URL

2
var displayUrl = UriHelper.GetDisplayUrl(Request);
var urlBuilder = new UriBuilder(displayUrl) {  Query = null, Fragment = null };

string _activation_url = urlBuilder.ToString().Substring(0, urlBuilder.ToString().LastIndexOf("/")) +"/this_is_my_link.html";

Я ожидаю, чтобы получить правильный путь производства URI, но я все еще получаю

HTTP://локальный: 5000/API/MDC/this_is_my_link.html

Я развернул это на Centos 7

Помогите мне, пожалуйста..

Спасибо

дон

  • 0
    У вас есть какой-то обратный прокси-сервер? Если да, отправляет ли обратный прокси заголовки, такие как X-Forwarded-For , X-Forwarded-Host и X-Forwarded-Proto ? Наконец, настроили ли вы свое приложение для принятия этих (и для доверия обратному прокси-серверу)?
Теги:

2 ответа

0

Если вы используете обратный прокси-сервер, вам следует прочитать это руководство от Microsoft.

По сути, ваш обратный прокси-сервер должен предоставлять эти заголовки вашему базовому приложению ASP.NET:

  • X-Forwarded-For - IP-адрес клиента
  • X-Forwarded-Host - заголовок Host от клиента (например, www.example.com:80)
  • X-Forwarded-Proto - протокол (например, HTTPS)

Затем вам нужно настроить приложение ASP.NET Core для их принятия. Вы можете сделать это, вызвав метод app.UseForwardedHeaders() в вашем методе Configure запуска.

По умолчанию (если я правильно читаю документы) UseForwardedHeaders (называемый выше) будет принимать X-Forwarded-For и X-Forwarded-Proto от обратного прокси-сервера localhost.

Если ваша ситуация сложнее, вы должны настроить требуемые заголовки/доверенные обратные прокси:

var forwardedOptions = new ForwardedHeadersOptions()
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedProto // allow for, host, and proto (ForwardedHeaders.All also works here)
};

// if it a single IP or a set of IPs but not a whole subnet
forwardedOptions.KnownProxies.Add(IPAddress.Parse("192.168.0.5"));

// if it a whole subnet
forwardedOptions.KnownNetworks.Add(new IPNetwork("192.168.0.1", 24)); // 192.168.0.1 - 192.168.0.254

app.UseForwardedHeaders(forwardedOptions);

Также обратите внимание, что в зависимости от используемого вами обратного прокси-сервера вам может потребоваться настроить его на обратном прокси-сервере.

0

при использовании ядра asp

absoluteUri = string.Concat(
                           request.Scheme,
                           "://",
                           request.Host.ToUriComponent(),
                           request.PathBase.ToUriComponent(),
                           request.Path.ToUriComponent(),
                           request.QueryString.ToUriComponent());

или вы можете выбрать либо Получение абсолютных URL-адресов с помощью ASP.NET Core

  • 0
    Можете ли вы объяснить немного о том, как это решает проблему? Я не уверен, что все по-другому, особенно если реализация метода, который использует OP, принимает значение Host из того же места, что и предложенное вами решение.
  • 0
    если вы используете github.com/aspnet/HttpAbstractions/blob/… . использовать общедоступную статическую строку GetEncodedUrl (этот запрос HttpRequest)
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню