使用Nancy我可以返回这样的回复:
public class MainModule : NancyModule
{
public MainModule()
{
Get["/"] = parameters => {
return "Hello World";
};
}
}
我可以像这样返回状态400:
public class MainModule : NancyModule
{
public MainModule()
{
Get["/"] = parameters => {
return HttpStatusCode.BadRequest;
};
}
}
如何返回特定的http状态代码并设置响应文本?
答案 0 :(得分:1)
看起来你应该实现一个IStatusCodeHandler
接口。我很快就会提供详细信息。
根据documentation,我发现了一些关于此的文章:
所以你的代码应该是这样的:
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);
}
};
}
}
所以我们可以在这里看到:
StatusCodeHandler(IRootPathProvider rootPathProvider)
HandlesStatusCode(HttpStatusCode statusCode, NancyContext context)
Response
内容中
Handle(HttpStatusCode statusCode, NancyContext context)
如果出于某种原因,这不是您的选择,只需创建一个需要状态和文本的HttpResponse,如下所示:
public class MainModule : NancyModule
{
public MainModule()
{
Get["/"] = parameters => {
return new Response {
StatusCode = HttpStatusCode.BadRequest, ReasonPhrase = "Hello World"
};
};
}
}