Могу ли я создать маршрут, который перенаправляет «/» в другую папку со статическими HTML-файлами в ней?

#.net #owin #asp.net-web-api-routing

#.net #owin #asp.net-web-api-routing

Вопрос:

Я использую WebAPI, и у меня есть настройка маршрута для «api / {controller} / {id}». Но у меня также есть следующая структура папок в проекте:

 Staticindex.html
StaticpageY.html
  

Я хочу, чтобы пользователи веб-сайта могли перейти к:

 http://localhost/index.html
http://localhost/pageY.html
  

Это то, чего я должен избегать в первую очередь? Если нет, есть ли способ сделать такое определение маршрута?

Ответ №1:

Если вы работаете на OWIN, вы можете сделать это, не касаясь маршрутизации Web API. Для этого вы должны иметь возможность использовать промежуточное программное обеспечение Microsoft.Owin.StaticFiles. Пример Setup класса:

 public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        var webApiConfig = new HttpConfiguration();

        // Your Web API routing setup here...

        app.UseWebApi(config);

        var assemblyPath = Assembly.GetExecutingAssembly().Location;
        var assemblyFolder = Path.GetDirectoryName(assemblyPath);
        var staticFolder = Path.Combine(exeFolder, "Static");

        app.UseStaticFiles(webFolder);
    }
}
  

Это будет обслуживать статические файлы из <dll folder>Static папки. Поэтому, если ваше приложение находится в C:MyApp , нажатие http://localhost/index.html , будет C:MyAppStaticindex.html служить статическим HTML.

Комментарии:

1. У меня это не сработало, отражение получает временную папку для сборок. Даже когда я жестко запрограммировал абсолютный путь в app.UseStaticFiles(@»C:etc «) это не сработало. Предполагается, что первым параметром «UseStaticFiles» должен быть путь запроса (и он не может заканчиваться на «/»), а не физический путь. Я использую Owin.StaticFiles версии v2.1.0.

2. Установите свой файл статического содержимого в VS, чтобы он копировался в каталог сборки.