在 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 状态代码并设置响应文本?

在 NancyFx 中,如何更改返回状态代码并设置响应文本

看起来你应该实现一个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);  
            }  
        };  
    }  
}

所以我们可以在这里看到:

  1. 类的构造函数,其中包含有关当前根
    的信息 StatusCodeHandler(IRootPathProvider rootPathProvider)
  2. 一个决定的方法,我们需要用这个类
    处理当前请求 HandlesStatusCode(HttpStatusCode statusCode, NancyContext context)
  3. 将根目录中
    的自定义错误文件内容添加到Response内容中的句柄方法 Handle(HttpStatusCode statusCode, NancyContext context)

如果由于某种原因这不适合您,只需创建一个需要状态和文本的 HttpResponse,如下所示:

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