iis7 asp.net mvc webapi重写

时间:2013-03-15 16:11:38

标签: asp.net-mvc rewrite

我遇到了与引用帖子(Rewrite rule for WebAPI fails because of ExtensionlessUrlHandler)相同的问题,并尝试了几次尝试解决问题并取得了一些成功。我现在所困的是以下几点:

背景:

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

目标:

  • 将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
  • 我打开了失败的请求跟踪,似乎重写模块正在重写网址,但由于某种原因,请求永远不会发送到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>

提前致谢!

1 个答案:

答案 0 :(得分:0)

这篇文章对我有用。 ARR/URL Rewriter within a .net Web API application

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