我有一个从主网站发回的一些JSON帖子中使用的URL:
http://site/Services/api.svc/UpdateItem
我们正在慢慢更新网站到ASP.Net MVC 2,并且不想破坏系统中的任何当前URL。 (JavaScript刷新问题)
我删除了/Services/api.svc,并将此API调用的逻辑移到了以下控制器中:
http://site/LegacyApi/UpdateItem
不幸的是,在添加路由时,我似乎无法覆盖api.svc并继续收到404错误。
路线:
routes.MapRoute(
"UpdateItemApi",
"Services/api.svc/UpdateItem",
new { controller = "LegacyApi", action = "UpdateItem" }
);
根据MSDN on this specific issue,路由应该通过。
非常感谢任何帮助。
标准.aspx页面的路由按预期工作,因此这似乎与.svc文件及其处理方式有关。
答案 0 :(得分:38)
您遇到的问题是由于.svc文件注册的构建提供程序。此构建提供程序由默认的机器级web.config文件注册。
为了在这种情况下使路由工作,您需要在应用程序的web.config文件中删除构建提供程序。以下代码段显示了如何从构建提供程序列表中删除.svc扩展名。
<system.web>
<compilation debug="true" targetFramework="4.0">
<buildProviders>
<remove extension=".svc"/>
</buildProviders>
...
答案 1 :(得分:4)
使用URL重写我能够执行this link suggested,只能向后执行:
<system.webServer>
<rewrite>
<rules>
<rule name="LegacyApiService" stopProcessing="true">
<match url="^Services/api.svc/(.*)$" />
<action type="Rewrite" url="LegacyApi/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>