C# 如何覆盖路由表中的.svc文件?
我有一个从主网站返回的JSON帖子中使用的URL: 我们正在缓慢地将网站更新为ASP.NETMVC2,不想破坏系统中的任何当前URL。(JavaScript刷新问题) 我已删除/Services/api.svc,并已将此api调用的逻辑移动到以下控制器中: 不幸的是,在添加路由时,我似乎无法让它覆盖api.svc并继续得到404错误 路线:C# 如何覆盖路由表中的.svc文件?,c#,asp.net-mvc-2,url-routing,C#,Asp.net Mvc 2,Url Routing,我有一个从主网站返回的JSON帖子中使用的URL: 我们正在缓慢地将网站更新为ASP.NETMVC2,不想破坏系统中的任何当前URL。(JavaScript刷新问题) 我已删除/Services/api.svc,并已将此api调用的逻辑移动到以下控制器中: 不幸的是,在添加路由时,我似乎无法让它覆盖api.svc并继续得到404错误 路线: routes.MapRoute( "UpdateItemApi", "Services/api.svc/Upda
routes.MapRoute(
"UpdateItemApi",
"Services/api.svc/UpdateItem",
new { controller = "LegacyApi", action = "UpdateItem" }
);
根据协议,路由应该通过
在此方面的任何帮助都将不胜感激
更新
标准.aspx页面的路由按预期工作,因此这似乎与.svc文件及其处理方式有关。使用URL重写,我能够做什么,只是向后:
<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>
您遇到的问题是由于注册了.svc文件的生成提供程序造成的。此生成提供程序由默认计算机级别的web.config文件注册 在这种情况下,为了使路由正常工作,您需要删除应用程序的web.config文件中的生成提供程序。以下代码段显示如何从生成提供程序列表中删除.svc扩展名
<system.web>
<compilation debug="true" targetFramework="4.0">
<buildProviders>
<remove extension=".svc"/>
</buildProviders>
...
...
我已经从Phil Haack那里加载了RoutedBugger,这甚至没有提示路由表显示,但仍然得到了404。谢谢,这成功了,摆脱了我的笨拙工作:)谢谢你,Haack先生这是你的完整帖子:)