2010-08-29 31 views
7

Trong tập tin tuyến Asax toàn cầu của tôi, tôi muốn để ánh xạ một con đường như thế này:Cách định tuyến chuỗi truy vấn bằng "?" và làm thế nào để xử lý nó

http://domain.com/add/link?url=http%3A%2F%2Fgoogle.com 

Và sau đó bắt nó bằng cách sử LinkController tôi với hành động được gọi Add.

Tôi có làm việc này không?

global.asax->

routes.MapRoute(
    "AddLink", 
    "Add/Link?{url}", 
    new { controller = "Link", action = "Add" } 
); 

LinkController->

public string Add(string url) 
{ 
    return url; // just want to output it to the webpage for testing 
} 

?? Điều đó dường như không hoạt động. Tôi đang làm gì sai? Cảm ơn!

Trả lời

15

ASP.Net MVC sẽ tự động liên kết các thông số từ chuỗi truy vấn; bạn không cần phải đặt nó trong tuyến đường.

Tuyến đường của bạn chỉ đơn giản là có thể

routes.MapRoute(
    "AddLink", 
    "Add/Link", 
    new { controller = "Link", action = "Add" } 
); 
+0

Cảm ơn rất nhiều! Điều đó đã làm điều đó. –

0

Hiện ValueProviderFactories mã nguồn MVC.

namespace System.Web.Mvc { 
    using System; 

    public static class ValueProviderFactories { 

     private static readonly ValueProviderFactoryCollection _factories = new ValueProviderFactoryCollection() { 
      new FormValueProviderFactory(), 
      new RouteDataValueProviderFactory(), 
      new QueryStringValueProviderFactory(), 
      new HttpFileCollectionValueProviderFactory() 
     }; 

     public static ValueProviderFactoryCollection Factories { 
      get { 
       return _factories; 
      } 
     } 

    } 
} 
+1

um, làm gì bây giờ? ;) –

+0

Thông số hành động ràng buộc IModelBinder. Giá trị trích xuất DefaultModelBinder từ HttpRequest sử dụng ValueProviderFactories. Vì vậy, tham số hành động tự động liên kết Form/Route/QueryString/UplodFile. – takepara

Các vấn đề liên quan