Похоже, существует серьезная проблема с использованием класса Uri с базовыми URI. По какой-то причине это «особенность», заключающаяся в том, что, если передается относительный URI, и он выглядит как полный URL, класс Uri проигнорирует baseUri и вместо этого будет использовать относительный URI. Это может быть уязвимость системы безопасности, и я хотел бы понять, как ее избежать, но при этом получить возможности объединения базовых и относительных URI для создания единого URL-адреса в C# dotnetcore.
В приведенном ниже примере можно увидеть, что относительный uri http://badexample.com
заставляет baseUri не отображаться в сгенерированном URI. Это опасно.
using System;
public class Program
{
public static void Main()
{
var baseUri = new Uri("http://google.com");
var relativeUri = new Uri(baseUri, "search?q=stuff");
Console.WriteLine(relativeUri);
var badUri = new Uri(baseUri, "http://badexample.com");
Console.WriteLine(badUri);
}
}
Вывод:
http://google.com/search?q=stuff
http://badexample.com/