Настольный веб-сервер - исходный код 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) - что на заглавной
// А следующая (не закомментированная) команда будет работать, только если прога
// запущена из нужного каталога - это нужно задать в свойствах консольного (от кого
// хост) проекта, вкладка «Сборка», Пункт «Путь вывода».
// Если в корневом каталоге есть папка 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 корневой директории)
Гм... Это Вы уже сами картинку найдите.
Вот и весь код.