Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
520 views
in Technique[技术] by (71.8m points)

c# - ASP.NET MVC 2 Issue - Dot in Route

I'm blanking and need a quick hand. Google has failed me. I'm working on replacing WCF/REST Starter Kit with ASP.NET MVC. I want to make the transition as painless as possible so I'm trying to create a route to match the following URL:

http://localhost/services/MyService.svc/UserInfo

I created the route in Global.asax.cs:

routes.MapRoute(
            "MyServiceDefault",
            "services/MyService.svc/{action}/{id}",
            new { 
                  controller = "MyService", 
                  action = "UserInfo", 
                  id = UrlParameter.Optional 
                }
        );

I soon realized that the request isn't even making it to my application because of the . in the MyService.svc part of the URL.

What am I missing to force the request to pass through to my application rather than being handled by the server as a static resource?

Update

I forgot to mention that I have also tried adding the following to Web.config to no avail:

<httpRuntime relaxedUrlToFileSystemMapping="true" />
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

It turns out that searching for the correct combination of terms will eventually yield results. Phil Haack actually has a block post about this exact issue:

Overriding a .svc Request With Routing

It turns out that for the *.svc extension, simply adding <httpRuntime relaxedUrlToFileSystemMapping="true" /> to the Web.config isn't enough.

In one of the framework Web.config files, there is a build provider associated with the *.svc that takes over the request before it gets to .NET MVC (and fails since this isn't really a WCF service). Once you know that, it's easy enough to remove the build provider in your app's Web.config:

<system.web>
  <compilation debug="true" targetFramework="4.0">
    <buildProviders>
      <remove extension=".svc"/>            
    </buildProviders>
    ...
</system.web>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...