2013-03-15 63 views
3

我有同樣的問題,在引用的帖子(Rewrite rule for WebAPI fails because of ExtensionlessUrlHandler),並嘗試了幾次嘗試解決問題,取得了一些成功。什麼我停留在現在是這樣的:iis7 asp.net mvc webapi rewrite

背景:

  • IIS7,重寫模塊和ARR(我是新手改寫& ARR)
  • 站點1使用ASP.Net主辦我的web前端MVC4(www.foo.com)
  • 站點2使用託管ASP.Net MVC4我的WebAPI(svc.foo.com)
  • 我有兩個網站上的代碼&網站CONFIGS完全控制

目標:

  • 重寫www.foo.com/svc/*到svc.foo.com/api/*

工作:

  • www.foo。 com/svc/somecontroller/0成功映射到svc.foo.com/api/somecontroller/0

不工作:

  • www.foo.com/svc/somecontroller?id=0
  • 我打開失敗請求跟蹤,似乎重寫模塊rewritting的URL,但由於某種原因,請求永遠不會爲SVC製造。 foo.com

詳情:

  • 要解決在引用的文章中,我追加了「.S」的每一個通話結束到的WebAPI的問題(我有完全的控制,所以我可以做這 - 不理想,但我需要這個工作,所以現在好了)
  • 沒有QS:www.foo.com/svc/somecontroller/0變成www.foo.com/svc/somecontroller.s
  • 隨着QS:www.foo.com/svc/somecontroller?id=0成爲www .foo.com/svc/somecontroller?id = 0.s
  • 然後,我使用重寫規則去除「.s」,並真正調用svc.foo.com/api/somecontroller/0或svc.foo .com/api/somecontroller?id = 0

我不能爲我的生活弄清楚爲什麼當使用查詢字符串格式時,這是行不通的。

重寫規則:提前

< rule name="Route requests with QS" stopProcessing="true"> 
    < match url="^svc/(.*)" /> 
    < conditions> 
     < add input="{QUERY_STRING}" pattern="(.*).s" /> 
    </conditions> 
    < action type="Rewrite" url="http://svc.foo.com/api/{R:1}?{C:1}" appendQueryString="false" logRewrittenUrl="true" /> 
</rule> 
< rule name="Route the requests without QS" stopProcessing="true"> 
    < match url="^svc/(.*).s" /> 
    < conditions> 
     < add input="{CACHE_URL}" pattern="^(https?)://" /> 
    </conditions> 
    < action type="Rewrite" url="{C:1}://svc.foo.com/api/{R:1}" logRewrittenUrl="true" /> 
</rule> 

謝謝!

+0

你有沒有找到解決方案?我想做同樣的事情 – MorganTiley 2013-08-15 13:47:24

+0

會是因爲/0.s會被視爲擴展名,而0.s不是擴展名嗎?因此它會通過extensionlessUrlHandler並在引用的帖子中失敗? – MorganTiley 2013-08-15 13:55:26

回答