dmitgu (dmitgu) wrote,
dmitgu
dmitgu

Настольный веб-сервер - исходный код 2 часть из 2

Исходный код к заметке Настольный веб-сервер - делаем со скриптами и картинками
Настольный веб-сервер - исходный код 1 часть из 2
Настольный веб-сервер - исходный код 2 часть из 2 - Вы читаете её

HomeModule.cs (измененный файл в папке Modules проекта Home)

using Nancy;

using Nancy.Hosting.Aspnet;

using Nancy.ViewEngines.Razor;

using SendExplorer.utilities;

namespace Home

{

public class HomeModule : NancyModule

{

     public HomeModule(IRootPathProvider rootPathProvider)

     {

         Get["/"] = parameters =>

         {

             // Простой вариант (следующая строка) закомментировал. но работает он именно так -

             // return "ee hoo! - no more little green monster...";

             // что отличается от просто строки (без return) - что на заглавной

             // http://nancyfx.org/

             // А следующая (не закомментированная) команда будет работать, только если прога

             // запущена из нужного каталога - это нужно задать в свойствах консольного (от кого

             // хост) проекта, вкладка «Сборка», Пункт «Путь вывода».

             // Если в корневом каталоге есть папка views, то файл Index.sshtml надо класть в

             // подкаталог views/Home корневого каталога (Home - из-за названия класса

             // HomeModule). А если нет папки views - то файл Index.sshtml надо класть в сам

             // корневой каталог. И из проекта (в Visual Studio) каталог views тогда надо

             // исключить - иначе при компиляции он будет сам воспроизводится.

             return View["Index.sshtml"];

         };

         Get["/{dir0}/{fname}.html"] = parameters =>

         {

             // Если в корневом каталоге есть папка views, то файлы придется класть в эту папку,

             // а начальным каталогом поиска будет views/Home корневого каталога (Home - из-за

             // названия класса HomeModule). И чтобы виртуальный путь соответстовал файловому,

             // нам надо отступить вниз на два каталога с views/Home, и вернуть нужный файл так:

             // return View["../../" + parameters.dir0 + "/" + parameters.fname + ".html"];

             // Ну, а если директории views в корневом каталоге нет, то и подкаталог Home

             // прога не ищет и мы кладем наш файл в заданный подкаталог корневого

             // каталога: 

             return View[parameters.dir0 + "/" + parameters.fname + ".html"];

         };

         Get["/{dir0}/{fname}.js"] = parameters =>

         {

             string[] aStr = new string[1];

             aStr[0] = parameters.dir0 + "/" + parameters.fname + ".js";

             return Response.Scripts(aStr, rootPathProvider);

         };

         Get["/{dir0}/{fname}.jpg"] = parameters =>

         {

             string str = parameters.dir0 + "/" + parameters.fname + ".jpg";

             return Response.Image(str, rootPathProvider, "image/jpeg");

         };

         Get["/{dir0}/{dir1}/{fname}.html"] = parameters =>

         {

             // Пояснения про корневой каталог и его подкаталоги (особено - почему

             // views мы не делаем) см. в Get["/{dir0}/{fname}.html"]

             return View[

                 parameters.dir0 + "/" + parameters.dir1 + "/" + parameters.fname + ".html"];

         };

         Get["/{dir0}/{dir1}/{fname}.js"] = parameters =>

         {

             return

               Response.Scripts(new[] { "My_dir/My_dir_page.js" }

                 , rootPathProvider

               );

         };

     }

}

}

Program.cs  (в папке проекта HomeDesktopApp)

namespace HomeDesktopApp

{

using System;

using Nancy.Hosting.Self;

using Home;

class Program

{

     static void Main(string[] args)

     {

         // HomeModule artificiaReference;

         var nancyHost = new NancyHost(new Uri("http://localhost:8085/"));

         nancyHost.Start();

         Console.WriteLine("Service started! Press any key for stop......");

         Console.ReadKey();

         nancyHost.Stop();

         Console.WriteLine("Service stoped!");

     }

}

}

My_dir_page.html (положить в подпапку My_dir корневой директории)

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="utf-8" />

<title>Моя страница!</title>

</head>

<body>

<p><strong>Проверка! Загружает ли веб-сервер ASP.NET MVC обычную HTML страницу</strong></p>

<p><strong>из подкаталога My_dir, расположенном в КОРНЕВОМ каталоге.</strong></p>

<p><strong>Для проверки в корневом каталоге надо убрать каталог VIEWS.</strong></p>

<p><strong>Если данная страница загрузидась, то - ДА! Загружает.</strong></p>

<p><strong>А если видна картинка под этой строкой, то - и картинки грузит!</strong></p>

<img src="My_dir_page.jpg">

<p><strong>А если еще и окно сообщения выведет, то - и скрипты грузит!</strong></p>

<script type="text/javascript" src="My_dir_page.js"></script>

</body>

</html>

My_dir_page.js (положить в подпапку My_dir корневой директории)

alert("!")

My_dir_page.jpg (положить в подпапку My_dir корневой директории)

Гм... Это Вы уже сами картинку найдите.

Вот и весь код.
Tags: ЖЖвЖЖ программирование, ИТ (информ. технологии), Мои алгоритмы
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 6 comments