2014-12-30 11 views
6

Utilizzando Nancy posso restituire una risposta come questa:In NancyFx come posso modificare il codice di stato di ritorno e impostare il testo di risposta?

public class MainModule : NancyModule 
{ 
    public MainModule() 
    { 
     Get["/"] = parameters => { 
      return "Hello World"; 
     }; 
    } 
} 

E posso restituire uno stato 400 come questo:

public class MainModule : NancyModule 
{ 
    public MainModule() 
    { 
     Get["/"] = parameters => { 
      return HttpStatusCode.BadRequest; 
     }; 
    } 
} 

Come faccio a restituire un codice di stato HTTP specifico e impostare il testo di risposta pure?

+2

funziona questo aiuto http://stackoverflow.com/questions/21099843/risposta-con-entrambi-corpo-e-stato-codice-in-nancy – csprabala

+2

Io voto per chiudere la mia stessa domanda come duplicato. La domanda trovata da @csprabala è esattamente la domanda che sto ponendo e la risposta funziona. –

+1

Questo dovrebbe essere chiuso, il link sopra è sufficiente. –

risposta

1

Sembra che si debba implementare un'interfaccia IStatusCodeHandler. Fornirò presto i dettagli.

Secondo il documentation, ho trovato alcuni articoli su questo:

Così il vostro codice dovrebbe essere simile a questo:

public class StatusCodeHandler : IStatusCodeHandler 
{ 
    private readonly IRootPathProvider _rootPathProvider; 

    public StatusCodeHandler(IRootPathProvider rootPathProvider) 
    { 
     _rootPathProvider = rootPathProvider; 
    } 

    public bool HandlesStatusCode(HttpStatusCode statusCode, NancyContext context) 
    { 
     return statusCode == HttpStatusCode.NotFound; 
    } 

    public void Handle(HttpStatusCode statusCode, NancyContext context) 
    { 
     context.Response.Contents = stream => 
     { 
      var filename = Path.Combine(_rootPathProvider.GetRootPath(), "content/PageNotFound.html"); 
      using (var file = File.OpenRead(filename)) 
      { 
       file.CopyTo(stream); 
      } 
     }; 
    } 
} 

modo che possiamo vedere qui:

  1. un costruttore per la classe con informazioni sulla vostra radice corrente
    StatusCodeHandler(IRootPathProvider rootPathProvider)
  2. A metodi che decide, sono abbiamo bisogno di gestire la richiesta corrente con questa classe
    HandlesStatusCode(HttpStatusCode statusCode, NancyContext context)
  3. Metodo di gestione che aggiunge al contenuto dell'errore Response il contenuto del file di errore personalizzato dalla directory radice
    Handle(HttpStatusCode statusCode, NancyContext context)

Se per qualche motivo questo non è un'opzione per voi, è sufficiente creare un HttpResponse che aveva bisogno di stato e il testo, in questo modo:

public class MainModule : NancyModule 
{ 
    public MainModule() 
    { 
     Get["/"] = parameters => { 
      return new Response { 
       StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "Hello World" 
      }; 
     }; 
    } 
}