2015-10-01 2 views
4

Я пытаюсь запустить самостоятельное приложение Nancy, но у меня возникают проблемы с его возвратом действительных ответов. Я новичок в Нэнси; Я ожидаю, что моя проблема будет довольно простой.Самостоятельный экземпляр Nancy, возвращающий 404 ошибки

Вот код:

class Program 
{ 
    static void Main(string[] args) 
    { 
     const String PORT_SETTING = "webServicePortNumber"; 
     const String URI = "http://localhost:{0}/download/"; 

     var portNum = ConfigurationManager.AppSettings[PORT_SETTING]; 
     var uri = new Uri(String.Format(URI, portNum)); 

     var config = new HostConfiguration { 
      UrlReservations = new UrlReservations { CreateAutomatically = true } 
     }; 

     using (var nancyHost = new NancyHost(new Bootstrapper(), config, uri)) { 
      nancyHost.Start(); 

      Console.WriteLine(String.Format("Listening on {0}. Press any key to stop.", uri.AbsoluteUri)); 
      Console.ReadKey(); 
     } 

     Console.WriteLine("Stopped. Press any key to exit."); 
     Console.ReadKey(); 
    } 
} 

internal class Bootstrapper : DefaultNancyBootstrapper 
{ 
    protected override Nancy.Diagnostics.DiagnosticsConfiguration DiagnosticsConfiguration 
    { 
     get { 
      return new DiagnosticsConfiguration { 
       Password = @"[password]" 
      }; 
     } 
    } 
} 

Мой NancyModule выглядит следующим образом:

public class DownloadsModule : NancyModule 
{ 

    public DownloadsModule() : base("/download") 
    { 
     RegisterRoutes(); 
    } 

    private void RegisterRoutes() 
    { 
     Put["/"] = parms => InitiateDownload(parms); 
     Get["/"] = parms => Summary(parms); 
     Get["/{id}"] = parms => GetStatus(parms.requestId); 
    } 

    private Response GetStatus(Guid requestId) 
    { 
     return Response.AsText("TEST: GetStatus requestId " + requestId); 
    } 

    private Response Summary(dynamic parms) 
    { 
     return Response.AsText("Summary: You loved me before, do you love me now?"); 
    } 

    private Response InitiateDownload(dynamic parms) 
    { 
     return Response.AsText("InitiateDownload."); 
    } 
} 

Нэнси работает; Я могу получить доступ к диагностике по адресу http://127.0.0.1:8880/download/_Nancy/. Глядя на них, маршруты выглядят готовыми. Интерактивные Диагностика/GetAllRoutes шоу:

P U T 
    name: [nothing] path: /download 
G E T 
    name: [nothing] path: /download 
    name: [nothing] path: /download/{id} 

И все же, я получаю назад, когда 404-я стараюсь http://localhost:8880/download/.

Запрос след на показах страницы диагностики:

Method: GET 
Request Url: 
Scheme: http 
Host Name: localhost 
Port: 8880 
Base Path: /download 
Path:/
Query: 
Site Base: http://localhost:8880 
Is Secure: false 
Request Content Type: 
Response Content Type: text/html 
Request Headers: 
    <snip> 
    Accept: text/html;q=1 
      application/xhtml+xml;q=1 
      image/webp;q=1 
      application/xml;q=0.9 
      */*;q=0.8 
    <snip> 
Response Headers: 
Status Code: 404 
Log: New Request Started 
     [DefaultResponseNegotiator] Processing as real response 

Так почему не Nancy маршрутизации этого запроса к соответствующему маршруту?

ответ

3

Проблема указал мне jchannon в Нэнси JabbR комнате:

URI, задающее http://localhost:{0}/download/, в то время как модуль также определяет базовый путь /download, поэтому в настоящее время его ищет URL из http://localhost:{0}/download/download/

Смежные вопросы