Respond with both body and status code in Nancy

寵の児 提交于 2019-12-03 10:41:01

问题


I'm new to Nancy and I want to return both a custom HttpStatusCode and a body (content). If I return an HttpStatusCode, it returns it with a blank body. If I return a string then it returns that as the body but always with a 200 status code of 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
            };
    }
}

回答1:


You could always create an instance of the Response type and set the Body and StatusCode yourself. If you wanted to take a shortcut you could do something like

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

return r;



回答2:


This should work.

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

For more information check the docs on controlling content negotiation.




回答3:


If you have problems with encoding it's better to use

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



回答4:


This is the simplest way I've found:

Return from your Module:

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


来源:https://stackoverflow.com/questions/21099843/respond-with-both-body-and-status-code-in-nancy

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!