.net Web API应用程序中的ARR/URL重写器

问题描述:

我有两个应用程序。其中之一是要处理各种产品的认证。正因为如此,我想从每一个网站改写一个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://*.com/questions/13885343/rewrite-rule-for-webapi-fails-because-of-extensionlessurlhandler和http://*.com/questions/15437131/iis7-asp-net-mvc -webapi-rewrite – Piedone

+0

是的!我们确实得到了这个工作。在执行路由之前,需要添加RouteTable.Routes.IgnoreRoute(“api/profiles/{* pathInfo}”);或类似的可以忽略你的ARR网址。我会发布一个答案。 – MindingData

我设法通过为ARR添加忽略路由来解决这个问题。

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

太好了,谢谢!顺便说一句,不只是忽略()(RouteCollection.Ignore())? – Piedone