views:

556

answers:

2

I have this URL that was used from some JSON post back from the main website:

http://site/Services/api.svc/UpdateItem

We are in the process of updating the web site slowly to ASP.Net MVC 2 and don't want to break any current URL's in the system. (JavaScript refresh issues)

I have deleted the /Services/api.svc and have moved the logic for this API call into the following Controller:

http://site/LegacyApi/UpdateItem

Unfortunately, when adding the route, I can't seem to get it to override the api.svc and keep getting a 404 error.

Route:

    routes.MapRoute(
        "UpdateItemApi",
        "Services/api.svc/UpdateItem",
        new { controller = "LegacyApi", action = "UpdateItem" }
    );

According to the MSDN on this specific issue, the routing should go through.

Any help on this is greatly appreciated.


Update

Routing for standard .aspx pages works as intended, so this seems to be something perticular with the .svc files and how they are handled.

+3  A: 

Using URL Rewrites I was able to do what this link suggested, only backwards:

  <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>
Tom Anderson
+24  A: 

The problem you're running into is due to a build provider that is registered for .svc files. This build provider is registered by the default machine level web.config file.

In order to get routing to work in this case, you'll need to remove the build provider in your application's web.config file. The following snippet shows how to remove the .svc extension from the list of build providers.

  <system.web>
    <compilation debug="true" targetFramework="4.0">
        <buildProviders>
            <remove extension=".svc"/>            
        </buildProviders>
    ...
Haacked
Thanks, that did the trick, and got rid of my janky work around :)
Tom Anderson
Thank you Mr. Haack this is your full post :) http://haacked.com/archive/2010/09/07/routing-and-build-providers.aspx
Wahid Bitar