2011-04-20 6 views
5

私は空白であり、迅速な手が必要です。 Googleは私を失敗させた。私はASP.NET MVCでWCF/RESTスターターキットを置き換える作業をしています。ASP.NET MVC 2 Issue - ルート内のドット

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

私はGlobal.asax.csでルート作成:

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

を私は、次のURLにマッチするルートを作成しようとしているので、できるだけ痛みのない移行を作りたいです私は間もなく、URLのMyService.svc部分の.のために、リクエストが自分のアプリケーションに作成されていないことに気付きました。

サーバーが静的リソースとして処理するのではなく、アプリケーションに要求を強制的に渡すために、何が欠けていますか?

更新

私は、私も無駄にWeb.configファイルに以下を追加しようとしていることを言及するのを忘れてしまった:

<httpRuntime relaxedUrlToFileSystemMapping="true" /> 

答えて

5

正しい用語の組み合わせを検索すると結局結果が得られます。フィル・ハークが実際にこの正確な問題についてのブロックポストがあります。

Overriding a .svc Request With Routing

それは* .SVC拡張のために、単にWeb.configファイルに<httpRuntime relaxedUrlToFileSystemMapping="true" />を追加するだけでは不十分であることが判明します。

フレームワークのWeb.configファイルの1つに、* .svcに関連付けられたビルドプロバイダがあり、.NET MVCに到達する前に要求を引き継ぎます(実際にはWCFサービスではないため失敗します) 。それがわかったら、アプリのWeb.configでビルドプロバイダを削除するだけで十分です:

+0

興味深い。私はこれをメモします。 –

0

RouteCollection.RouteExistingFilesプロパティを見てみましょう。デフォルトではfalseに設定されています。あなたのサービスがプロジェクトのサービスパスの下にあり、これが問題の原因になっている可能性があります。

+0

私はサービスフォルダを持っていませんが、とにかくそれを打ちました。運がない。私のアプリはまだルートを処理することはできません。 –

0

このarticleは、asp.net mvcアプリケーションでさまざまな拡張機能を使用して、.NETフレームワークにルーティングする方法を示しています。具体的には、

から始まる部分に注意してください。
This is done using a script named registermvc.wsf.