您正在根据完整URL匹配服务器变量,包括域名。这不会起作用;-)。 Content-Type的价值无关紧要,无论如何你都会替换它,所以你可以匹配任何东西。为了确保不会在每个页面上都替换它,您需要添加一个前提条件,以仅匹配以/ Feeds/Atom开头的请求(在{REQUEST_URI}上)。这里有一个例子:
<outboundRules>
<rule name="AtomFeedsIMEType" preCondition="Match atom feeds">
<match serverVariable="RESPONSE_Content_Type" pattern="(.*)" negate="false" />
<action type="Rewrite" value="application/atom+xml" replace="true" />
</rule>
<preConditions>
<preCondition name="Match atom feeds">
<add input="{REQUEST_URI}" pattern="^/Feeds/Atom" />
</preCondition>
</preConditions>
</outboundRules>
为了这个工作,服务器必须被设置为允许改变Content-Type头。这可以在服务器级别或站点级别完成,但需要由管理员完成。它在applicationHost.config中设置,而不是在web.config中设置。这里是的applicationHost.config的一部分,允许对:
<location path="your_site_name">
<system.webServer>
<rewrite>
<allowedServerVariables>
<add name="CONTENT_TYPE" />
</allowedServerVariables>
</rewrite>
</system.webServer>
</location>
您还可以允许这个从GUI,以查看服务器变量下从主屏幕URLRewrite行动联系起来。希望这可以帮助。
非常感谢你的详细解释! –
但是,我仍然有问题!每个:http://learn.iis.net/page.aspx/570/application-request-routing-version-2-overview/ HTTP_CONTENT_TYPE已被更改为RESPONSE_CONTENT_TYPE,无论我使用什么,它都不起作用(即内容类型不会更改)!实际上,我的开发环境请求URI是:http://localhost/WayneBlog.Web/Feeds/Atom,模式“^/Feeds/Atom”是否正确?请指导 –
是的,您必须使用RESPONSE_CONTENT_TYPE来替换Content-Type HTTP标头是正确的。这就是我在我的例子中所做的。如果您的请求URI不同,您必须在前提条件下更改该模式。例如。 pattern =“/ WayneBlog.Web/Feeds/Atom”,或者如果您希望开发环境与实际环境兼容,可以使用pattern =“/ Feeds/Atom $”来匹配任何以/ Feed/Atom结尾的URL。 –