Helpex - Trao đổi & giúp đỡ Đăng nhập
125

Công ty chúng tôi đang phát triển API cho các sản phẩm của mình và chúng tôi đang nghĩ về việc sử dụng ASP.NET MVC. Khi thiết kế API của chúng tôi, chúng tôi đã quyết định sử dụng các cuộc gọi như cuộc gọi dưới đây để người dùng yêu cầu thông tin từ API ở định dạng XML:

http://ws.audioscrobbler.com/2.0/?method = artist

Như bạn có thể thấy, nhiều tham số được truyền (tức là artistapi_key). Trong ASP.NET MVC, artistsẽ là controller, getImageshành động, nhưng làm thế nào tôi sẽ vượt qua nhiều tham số để hành động?

Điều này thậm chí có thể sử dụng định dạng trên?

125 hữu ích 0 bình luận 252k xem chia sẻ
266

Các tham số được hỗ trợ trực tiếp trong MVC bằng cách thêm các tham số vào các phương thức hành động của bạn. Đưa ra một hành động như sau:

public ActionResult GetImages(string artistName, string apiKey)

MVC sẽ tự động điền các tham số khi được cung cấp một URL như:

/Artist/GetImages/?artistName=cher&apiKey=XXX

Một trường hợp đặc biệt bổ sung là các tham số có tên "id". Bất kỳ tham số có tên ID nào cũng có thể được đưa vào đường dẫn thay vì chuỗi truy vấn, vì vậy đại loại như:

public ActionResult GetImages(string id, string apiKey)

sẽ được điền chính xác với một URL như sau:

/Artist/GetImages/cher?apiKey=XXX

Ngoài ra, nếu bạn có các kịch bản phức tạp hơn, bạn có thể tùy chỉnh các quy tắc định tuyến mà MVC sử dụng để định vị một hành động. Tệp global.asax của bạn chứa các quy tắc định tuyến có thể được tùy chỉnh. Theo mặc định, quy tắc trông như thế này:

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

Nếu bạn muốn hỗ trợ một url như

/Artist/GetImages/cher/api-key

bạn có thể thêm một tuyến đường như:

routes.MapRoute(
            "ArtistImages",                                              // Route name
            "{controller}/{action}/{artistName}/{apikey}",                           // URL with parameters
            new { controller = "Home", action = "Index", artistName = "", apikey = "" }  // Parameter defaults
        );

và một phương thức như ví dụ đầu tiên ở trên.

266 hữu ích 5 bình luận chia sẻ
20

Bắt đầu với MVC 5, bạn cũng có thể sử dụng Định tuyến thuộc tính để di chuyển cấu hình tham số URL sang bộ điều khiển của mình.

Một cuộc thảo luận chi tiết có sẵn tại đây: http://bloss.msdn.com/b/webdev/archive/2013/10/17/attribution-routing-in-asp-net-mvc-5.aspx

Tóm lược:

Đầu tiên bạn kích hoạt định tuyến thuộc tính

 public class RouteConfig 
 {
     public static void RegisterRoutes(RouteCollection routes)
     {
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

         routes.MapMvcAttributeRoutes();
     } 
 }

Sau đó, bạn có thể sử dụng các thuộc tính để xác định tham số và các loại dữ liệu tùy chọn

public class BooksController : Controller
{
    // eg: /books
    // eg: /books/1430210079
    [Route("books/{isbn?}")]
    public ActionResult View(string isbn)
20 hữu ích 1 bình luận chia sẻ
19

Bạn có thể chuyển các tham số tùy ý thông qua chuỗi truy vấn, nhưng bạn cũng có thể thiết lập các tuyến tùy chỉnh để xử lý nó theo cách RESTful:

http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&
                                  api_key=b25b959554ed76058ac220b7b2e0a026

Đó có thể là:

routes.MapRoute(
    "ArtistsImages",
    "{ws}/artists/{artist}/{action}/{*apikey}",
    new { ws = "2.0", controller="artists" artist = "", action="", apikey="" }
    );

Vì vậy, nếu ai đó sử dụng tuyến đường sau:

ws.audioscrobbler.com/2.0/artists/cher/images/b25b959554ed76058ac220b7b2e0a026/

Nó sẽ đưa họ đến cùng một nơi mà chuỗi truy vấn mẫu của bạn đã làm.

Trên đây chỉ là một ví dụ và không áp dụng các quy tắc và ràng buộc kinh doanh mà bạn phải thiết lập để đảm bảo mọi người không 'hack' URL.

19 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# .net asp.net mvc routing , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading