如何在 Nancyfx 添加请求 header?

How to add a request header in Nancyfx?

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

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

它给我错误。

谁能给我指出正确的方向?

请注意您在尝试操作 Response 时如何尝试设置 Request

试试这个..

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 的样子..

或者 .. 如果您要在模块级别设置它,您可以使用 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");
};

因为这个问题是关于将 headers 添加到 nancy request,我需要这样做,因为我需要添加一个 origin header,和其他一些人在向我的应用程序发出请求时 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 很有用,因为空参数(bodyprotocolVersion)如果没有设置,我通过了初始化。

出于某种原因,内容协商的答案对我来说不起作用,但我找到了另一种方法:

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;
  };