2014-02-10 40 views
2

我有兩個應用程序。其中之一是要處理各種產品的認證。正因爲如此,我想從每一個網站改寫一個URL到我們的「身份驗證」項目。它看起來像這樣。.net Web API應用程序中的ARR/URL重寫器

http://www.mywebsite.com/api/profile/login - >http://www.myauthentication.com/api/profile/login

所以基本上推送請求跨域。

爲此,我在IIS中設置了ARR和URL重寫。然而,我似乎無法得到它的工作,我有一種感覺URL重寫沒有運行通常會導致404的請求。我認爲這是因爲在REDIRECT請求(301重定向),配置完美工作。當我使用重寫時,我得到一個通用的404頁面。

規則配置看起來按照以下:

<rules> 
    <rule name="Route the requests for the Profile API." enabled="true" stopProcessing="true"> 
     <match url="^profiles/(.*)" /> 
     <action type="Rewrite" url="http://authentication.local/api/profiles/{R:1}" logRewrittenUrl="true" /> 
    </rule> 
</rules> 

應當指出的是,我使用的WebAPI,不MVC,這我不知道這是造成問題或沒有。因爲重定向工作,但不是重寫,我相信我已經安裝了一切安裝在IIS中。

對於ARR,我只是勾選了「啓用代理服務器」,但我不確定是否需要執行其他任何操作。

+0

我有類似的問題。有趣的是,似乎URL重寫不攔截呼叫,如果在同一個應用程序中爲該URL映射了HTTP路由。所以例如我有/ API/...映射爲Web API調用,但有URL重寫規則,應該重寫所有內容。他們不會接到/ api的電話...你解決了這個問題嗎? – Piedone

+0

參見:http://stackoverflow.com/questions/13885343/rewrite-rule-for-webapi-fails-because-of-extensionlessurlhandler和http://stackoverflow.com/questions/15437131/iis7-asp-net-mvc -webapi-rewrite – Piedone

+0

是的!我們確實得到了這個工作。在執行路由之前,需要添加RouteTable.Routes.IgnoreRoute(「api/profiles/{* pathInfo}」);或類似的可以忽略你的ARR網址。我會發佈一個答案。 – MindingData

回答

1

我設法通過爲ARR添加忽略路由來解決這個問題。

RouteTable.Routes.IgnoreRoute("api/profiles/{*pathInfo}"); 
+0

太好了,謝謝!順便說一句,不只是忽略()(RouteCollection.Ignore())? – Piedone

相關問題