复杂的MVC路由

时间:2014-09-28 21:46:04

标签: asp.net-mvc routes

我的MVC应用程序中有以下路径:

        routes.MapRoute(
            name: "Default",
            url: "api/{server}/{port}/{route}",
            defaults: new { 
                controller = "Home", 
                action = "Index", 
                server = UrlParameter.Optional, 
                port = UrlParameter.Optional, 
                route = UrlParameter.Optional }
        );

当网址为http://localhost:80/api/myserver.mydomain.net/8080/mypage时,此路线会被点击,但当我将网址更改为http://localhost:80/api/myserver.mydomain.svc/8080/mypage时,路线突然不会被点击。知道为什么简单地将我的路线中的参数从'.net'改为'.svc'会停止工作吗?

2 个答案:

答案 0 :(得分:2)

我找到了问题here的答案。我所要做的就是从我的网站上删除.svc构建提供程序:

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

答案 1 :(得分:1)

.svc是WCF端点的路径扩展,因此IIS将通过不同的机制(ISAPI模块/处理程序)处理此问题,而不是通过MVC / WebAPI路由引擎。

尝试将以下内容添加到web.config,它会强制IIS在每次请求时运行路由引擎。

<configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" /> 
    .....

注意:这可能会给您的网页请求带来不必要的开销。

另一种选择可能是删除模块本身,但这会影响您可能正在运行的任何WCF端点。

<configuration>
    <system.webServer>
        <modules> 
            <remove name="ServiceModel-4.0" />
    .....