2016-09-23 74 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