2016-09-23 75 views
0

我正在尝试创建一个只对某些接受标题类型作出响应的南希WebAPI。我想要的是在自定义接受类型application/json上回复,或者如果客户端已将*/*添加为accept头,那么我也会在这里返回JSON。对NancyFx MediaRange的困惑

我想执行以下操作会解决我的问题(我已经不再赘述/保密一些代码):

return this.Negotiate 
      .WithMediaRangeResponse(new MediaRange("MyCustomType"),() => return new Response() {....}) 
      .WithMediaRangeResponse(new MediaRange("application/json"),() => return new Response() {....}) 
      .WithMediaRangeResponse(new MediaRange("*/*"),() => return new Response() {....}) 

我预计,鉴于此代码,如果接受头包含MyCustomType那么第一表达将被执行,或者,如果accept头包含application/json或*/*,那么它们各自的表达式将被执行。如果没有这三个值中的任何一个请求进入,则会发生另一个动作(还没有弄清楚如何默认为BAD REQUEST)。

但是,似乎正在发生的事情是*/* MediaRange表达式似乎被调用了任何不是M​​yCustomType或application/json的接受头文件。所以如果我通过“文本/ HTML”它得到了一个有效的回应,这不是我想要的。如果客户端在accept头中传递了*/*,而不是其他任何其他接受头类型的catch-all,我只想匹配*/*。

回答

0

对于这个工作,你将需要添加一个BeforeHook视察头,并决定是否将允许它通过或not.Something这样 pipelines.BeforeRequest += (ctx) => { return <null or a Response object>; }; 其中null将让请求通过,并ResponseBAD REQUEST

+0

谢谢,会试试这个 – user2688880