3

我遇到了与引用的帖子相同的问题( WebAPI 的重写规则因 ExtensionlessUrlHandler 而失败),并尝试了几次尝试以成功解决该问题。我现在遇到的问题如下:

背景:

  • IIS7、重写模块和 ARR(我是重写和 ARR 的新手)
  • Site1 使用 ASP.Net MVC4 (www.foo.com) 托管我的 Web 前端
  • Site2 使用 ASP.Net MVC4 (svc.foo.com) 托管我的 webapi
  • 我可以完全控制两个站点的代码和站点配置

目标:

  • 将 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
  • 我打开了失败的请求跟踪,似乎重写模块正在重写 url,但由于某种原因,从未向 svc.foo.com 发出请求

细节:

  • 为了解决引用帖子中的问题,我在每次调用 webapi 的末尾附加了一个“.s”(我有完全的控制权,所以我可以做到这一点 - 不理想,但我现在需要这个工作正常)
  • 没有 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>

提前致谢!

4

1 回答 1

0

这篇文章对我有用。 .net Web API 应用程序中的 ARR/URL 重写器

添加 ignoreRoutes 完美地完成了这项工作。

于 2015-06-14T15:22:14.763 回答