@Melz

Как в Asp.Net Core WebApi сгенерировать URL?

Добрый день,
Есть небольшой REST API на Asp.net Core.
На старте он генерит небольшой json с линками на ресурсы через

app.UseStaticFiles(new StaticFileOptions
{
    FileProvider = fileProvider,
    RequestPath = requestPath
});


Как сгенерировать линки на статичные файлы?
Те я хочу на выход https://localhost:7123/test/index.png

Ответ на вопрос дан тут и много еще где... и выглядит как-то так:

public class YourController : Controller 
{
    private readonly IWebHostEnvironment _webHostEnvironment;

    public YourController (IWebHostEnvironment webHostEnvironment)
    {
        _webHostEnvironment= webHostEnvironment;
    }

    public IActionResult Index()
    {
        string webRootPath = _webHostEnvironment.WebRootPath;
        string contentRootPath = _webHostEnvironment.ContentRootPath;

        string path ="";
        path = Path.Combine(webRootPath , "CSS");
        //or path = Path.Combine(contentRootPath , "wwwroot" ,"CSS" );
        return View();
    }
}


В моем случает это WebApi и WebRootPath всегда будет null, поэтому надо использовать ContentRootPath.

Проблема в том, что когда я запускаю проект _webHostEnvironment выглядит так:
62fb98a1b8761957846043.png

Те я получаю правильный пусть, но это локальный пусть к папке проекта: C:\Users\много_букв\index.png

Как получить URL типа:
https://localhost:7123/test/index.png

P.S.: понимаю что очень просто и где-то туплю :(
  • Вопрос задан
  • 105 просмотров
Пригласить эксперта
Ответы на вопрос 1
BasiC2k
@BasiC2k
.NET developer (open to job offers)
Возможно так:

string file = Path.Combine(Directory.GetCurrentDirectory(), @"test", "index.png");


например для проектов с WebRootPath путь указывается так:
string file = Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\test", "index.png");


но это всё только для получения физического пути к файлу.
Для формирования URL:

Uri CompleteUrl= new Uri("https://localhost:7123", "test/index.png");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы