如何在Nancyfx中添加请求标头?

时间:2015-02-01 00:40:29

标签: c# web nancy

我尝试在ApplicationStartup覆盖中的引导程序中添加它。

pipelines.AfterRequest.AddItemToStartOfPipeline(ctx =>
{
  ctx.Request.Headers["x-fcr-version"] = "1";
});

它给我错误。

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:7)

注意在尝试操纵Request时如何设置Response

试试这个..

protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
{
    base.RequestStartup(container, pipelines, context);

    pipelines.AfterRequest.AddItemToEndOfPipeline(c =>
    {
        c.Response.Headers["x-fcr-version"] = "1";
    });
}

这就是我Response的样子..

enter image description here

或..如果您要在模块级设置它,可以使用Connection Negotiation ...

Get["/"] = parameters => {
    return Negotiate
        .WithModel(new RatPack {FirstName = "Nancy "})
        .WithMediaRangeModel("text/html", new RatPack {FirstName = "Nancy fancy pants"})
        .WithView("negotiatedview")
        .WithHeader("X-Custom", "SomeValue");
};

答案 1 :(得分:0)

因为这个问题是关于向nancy 请求添加标题,我需要添加一个原始标题,以及其他一些人在向我的app api发出请求时需要添加标题。

为了让它发挥作用,我做了以下事情:

    //create headers dictionary
    var myHeaders = new Dictionary<string, IEnumerable<string>>();
    myHeaders.Add("origin",new List<String>{"https://my.app.com"});
    //..... snip - adding other headers ....//  

    var uri = new Uri("https://my.api.com");
    var request = new Nancy.Request("OPTIONS", uri, null, myHeaders,"127.0.0.1", null);

我发现阅读nancy request source source有用,作为空参数,( body protocolVersion ),如果没有设置,我通过get初始化。

答案 2 :(得分:0)

出于某种原因,内容协商的答案在我的情况下不起作用,但我找到了另一种方式:

Get["result"] = x=>
{
    ...

    var response = Response.AsText(myModel, "application/json");
    response.Headers.Add("Access-Control-Allow-Origin", "http://example.com");
    response.Headers.Add("Access-Control-Allow-Credentials", "true");

    return response;
  };