Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何覆盖路由表中的.svc文件?_C#_Asp.net Mvc 2_Url Routing - Fatal编程技术网

C# 如何覆盖路由表中的.svc文件?

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

我有一个从主网站返回的JSON帖子中使用的URL:

我们正在缓慢地将网站更新为ASP.NETMVC2,不想破坏系统中的任何当前URL。(JavaScript刷新问题)

我已删除/Services/api.svc,并已将此api调用的逻辑移动到以下控制器中:

不幸的是,在添加路由时,我似乎无法让它覆盖api.svc并继续得到404错误

路线:

    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先生这是你的完整帖子:)