2014-01-13 29 views
24

我是新來的南希,我想返回一個自定義的HttpStatusCode和一個正文(內容)。如果我返回一個HttpStatusCode,它會返回一個空白的主體。如果我返回一個字符串,那麼它返回的是身體,但總是有一個200狀態代碼OK。在南希回覆身體和身份代碼

public class SendSMS : NancyModule 
{ 
    public SendSMS() 
    { 
     Post["/SendSMS"] = parameters => 
      { 
       return HttpStatusCode.BadRequest; // this works, no body 
       return "Missing \"to\" parameter"; // this works, 200 status code 
       // want to return status code with message 
      }; 
    } 
} 

回答

22

您可以隨時創建Response類型的實例,並自行設置BodyStatusCode。如果你想走捷徑,你可以做類似

var r = (Response)"Some string that goes into the body"; 
r.StatusCode = 123; 

return r; 
+0

謝謝。這工作正如希望的那樣。 –

13

這應該有效。

public class SendSMS : NancyModule 
{ 
    public SendSMS() 
    { 
     Post["/SendSMS"] = parameters => 
     { 
      return Negotiate.WithModel("Missing \"to\" param") 
          .WithStatusCode(HttpStatusCode.BadRequest)   
     }; 
    } 
} 

欲瞭解更多信息,請查閱controlling content negotiation的文檔。

+1

該方法的唯一問題是它逃避字符串並添加引號arou nd它。 –

4

如果你有問題編碼,最好使用

return new TextResponse(HttpStatusCode.STATUS, "Text Responsé") 
3

這是我發現的最簡單的方法:

從您的模塊返回:

return new Response { 
       StatusCode = HttpStatusCode.NotFound, ReasonPhrase = "Resource not found" 
      }; 
+0

ReasonPhrase是用於編碼而不是響應主體的附加文本。 – tBlabs