【问题标题】:ARR/URL Rewriter within a .net Web API application.net Web API 应用程序中的 ARR/URL 重写器
【发布时间】:2014-05-08 05:51:02
【问题描述】:

我有两个应用程序。其中一个将处理一系列产品的身份验证。正因为如此,我想从每个单独的网站重写一个 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,我只是勾选了“启用代理”,但我不确定是否需要做其他任何事情。

【问题讨论】:

  • 我也有类似的问题。有趣的是,如果在同一应用程序中为该 URL 映射了 HTTP 路由,则 URL 重写似乎不会拦截调用。所以例如我为 Web API 调用映射了 /api/...,但有应该重写所有内容的 URL 重写规则。他们没有捕捉到对 /api 的调用......你解决了这个问题吗?
  • 是的!我们确实得到了这个工作。在你做你的路线之前,你需要添加 RouteTable.Routes.IgnoreRoute("api/profiles/{*pathInfo}");或类似忽略您的 ARR URL。我会发布一个答案。

标签: iis url-rewriting asp.net-web-api arr


【解决方案1】:

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

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

【讨论】:

  • 太好了,谢谢!顺便说一句,这不是简单的 Ignore() (RouteCollection.Ignore()) 吗?
  • 很抱歉,你把这段代码剪断了,不容易找到!也许是 Global.asax ?我正在使用 webApi 看起来它不会忽略路由
猜你喜欢
  • 2012-12-24
  • 1970-01-01
  • 2011-03-05
  • 2011-02-20
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多