要对RESTful服务进行版本控制,我想使用URL重写模块执行以下操作;
将服务映射到服务器/ https://server/service/ /v1/如果Accept头(HTTP_ACCEPT?)是application/vnd.mycompany.service+xml
将服务映射到服务器/ https://server/service/ /v2/如果Accept头(HTTP_ACCEPT?)是application/vnd.mycompany.service-2+xml
我尝试了下面的规则,但是我不能让它工作:
<rules>
<rule name="Route request to correct service version" patternSyntax="Wildcard">
<match url="*service*" />
<conditions>
<add input="{HTTP_ACCEPT}" pattern="application/vnd.mycompany.*" />
</conditions>
<action type="Rewrite" url="Service/v1/{R:2}" logRewrittenUrl="true" />
</rule>
</rules>感谢任何人的帮助!
--larsw
发布于 2012-02-02 21:29:23
由于不熟悉网址重写机制,我不能直接帮助您,但是,如果您使用Web API托管您的服务,那么HttpMessageHandler将能够基于accept标头进行这种网址转换。
发布于 2012-02-03 01:11:23
解决了它。
a)不知何故,applicationHost.config中的RedirectModule没有连线。b)以下配置起作用:
<rule name="Route request to correct service version" patternSyntax="Wildcard">
<match url="*service*" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="true">
<add input="{HTTP_ACCEPT}" pattern="*application/vnd.mycompany.*" />
</conditions>
<action type="Rewrite" url="service/v1{R:2}" logRewrittenUrl="true" />
</rule> c)我在{R:2}变量前有一个额外的斜杠,导致重写的url有一个双斜杠。
--larsw
https://stackoverflow.com/questions/9112177
复制相似问题