2016-04-04 25 views
2

WebApplicationを実装する際に、RouteValueDictionaryのキー "RouteModels"で疑わしいエントリを見つけました。ASP.NET RouteValueDictionaryにKey "RouteModels"を持つエントリが含まれています

でもGoogleはそのエントリの結果を私に知らせていません。 どこから来たのか説明できますか? カスタムルートから来ていますか? これはモデルバインディングによってバインドされた値ですか?

コントローラでActionMethodeの宣言です:リクエストのRouteValueDictionaryは、次のエントリが含まれ

[Route("User/{user}")] 
public ActionResult UserForums(User user, int page = 1) 

enter image description here

+0

**わからない**しかし、 'RouteValueDictionary'に' RouteModels'キーが追加されていると思います。 –

答えて

0

それは、カスタムルートから来ていますか?

不明。ただし、ルート値は完全にで、カスタムルートクラスの設計方法によって異なります。

public class SampleRoute : RouteBase 
{ 
    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     var path = httpContext.Request.Path.Substring(1); 
     if (path.Equals("the/virtual/path")) 
     { 
      var routeData = new RouteData(this, new MvcRouteHandler()); 

      routeData.Values["user"] = "TheUser"; 
      routeData.Values["controller"] = "Home"; 
      routeData.Values["action"] = "Custom"; 
      routeData.Values["RouteModels"] = new List<RouteModel> { new RouteModel { Name = "Foo" }, new RouteModel { Name = "Bar" } }; 

      routeData.DataTokens["MetaData"] = "SomeMetadata"; 

      return routeData; 
     } 

     return null; 
    } 

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) 
    { 
     string user = values["user"] as string; 
     string controller = values["controller"] as string; 
     string action = values["action"] as string; 
     IEnumerable<RouteModel> routeModels = values["RouteModels"] as IEnumerable<RouteModel>; 

     if ("TheUser".Equals(user) && "Home".Equals(controller) && "Custom".Equals(action)) 
     { 
      // Use the route models to either complete the match or to do something else. 


      return new VirtualPathData(this, "the/virtual/path"); 
     } 

     return null; 
    } 

    private class RouteModel 
    { 
     public string Name { get; set; } 
    } 
} 

私の推測では、これはいくつかの特殊なルートやルートコレクションに余分なデータを記憶しているfilterのいずれかであるということです。しかし、著者がDataTokens(メタデータ用)ではなくルート値として格納することを選択した理由は、謎です。

関連する問題