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

时间:2014-12-30 08:49:59

标签: c# nancy

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

1 个答案:

答案 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);  
            }  
        };  
    }  
}

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

  1. 您班级的构造函数,包含有关您当前词根的信息 StatusCodeHandler(IRootPathProvider rootPathProvider)
  2. 决定的方法是,我们需要处理此类的当前请求 HandlesStatusCode(HttpStatusCode statusCode, NancyContext context)
  3. 处理方法,它将根目录中的自定义错误文件内容添加到Response内容中 Handle(HttpStatusCode statusCode, NancyContext context)
  4. 如果出于某种原因,这不是您的选择,只需创建一个需要状态和文本的HttpResponse,如下所示:

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