2012-05-01 12 views
0

ASP.NET MVCフレームワークのルーティングで、デフォルトルートを使用してHttpHandlerに必要なURLルートを取得する際に問題が発生しました。そしてその逆:RouteTableを使用してASP.NET MVCのHttpHandlerにすべての "/ api"リクエストをルーティング

routes.MapRouteLowercase(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = UrlParameter.Optional });// Parameter defaults 

私は私が必要なルートを無視して試してみた:

routes.IgnoreRoute("api/{*pathInfo}"); 

MVCルートが追加される前に、私はのRouteTableに追加する場合は、すべてのMVCのルートが私を指して終わります"/ api"ルート。

後で追加すると、ルートはルーティングテーブルにありますが認識されません。私はマッチとしてルートを表示するRouteDebuggerを使ってみましたが、決して呼び出されません。

ソースはthis micro REST frameworkです

+0

また、私はこれを試してみました:http://stackoverflow.com/questions/5942452/httpsandler-to-a-path-wildcard-mappingはできますが運がない –

答えて

0

私はそれを回避する方法を見つけましたが、URLが "api /"で始まっていない場合、私のルートがMVCルートでなぜchompingしているのか説明していません。私が使用している周りの

仕事は、それがURL世代だ場合はチェックする私のルートに制約を追加し、それを無視することであり、それは、渡されるMVCデータだ場合:

// Constrain HTTP method, and an extra constraint so MVC urls aren't swallowed. 
route.Constraints = new RouteValueDictionary(); 
route.Constraints.Add("httpMethod", new HttpMethodConstraint(new string[] { restAttribute.Method })); 
route.Constraints.Add("MvcContraint", new IgnoreMvcConstraint()); 

RouteTable.Routes.Add(route); 

制約:

public class IgnoreMvcConstraint : IRouteConstraint 
{ 
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     if (routeDirection == RouteDirection.UrlGeneration) 
      return false; 
     if (values.ContainsKey("controller") || values.ContainsKey("action")) 
      return false; 

     if (route.Url.StartsWith(RestHttpHandler._baseUrl)) 
      return true; 
     else 
      return false; 
    } 
} 
1

ルーティングを行うにはMVCフレームワークが必要ですか?

ない場合は、この記事を見て:あなたは、迅速かつ簡単な何かが必要な場合はBasic Routing for HttpHandler

それは、良い選択肢である。)

+0

ありがとうございますが、私は既にhttphandlerを使用しています –

関連する問題