在 NancyFx 中,如何更改返回状态代码并设置响应文本
本文关键字:代码 设置 响应 文本 状态 返回 NancyFx 何更改 | 更新日期: 2023-09-27 18:35:35
使用 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 状态代码并设置响应文本?
看起来你应该实现一个IStatusCodeHandler
接口。
根据文档,我找到了一些关于此的文章:
- NancyFx 中的自定义错误页面
- Nancyfx (C# Web Framework) 中的自定义错误页面
- 南希和自定义错误页面(VB.NET 代码)
所以你的代码应该是这样的:
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"
};
};
}
}