2008-12-06 37 views
8

Tôi mới tham gia ASP.NET MVC và tôi đang cố gắng lấy url đầy đủ cho một hành động khi làm việc trong chế độ xem. Tôi cần điều này để gửi tới API của bên thứ ba dưới dạng gọi lại. Ví dụ những gì tôi cần làCách ưa thích để có được đường dẫn máy chủ đầy đủ trong chế độ xem ASP.NET MVC là gì?

http://myserver.com/controller/action

Khi tôi sử dụng

<%= Url.Action("action", "controller") %> 

tôi nhận được

/controller/action

Tôi biết một số cách để thêm đường dẫn cơ sở máy chủ cho điều này nhưng tôi tự hỏi cách tốt nhất để làm điều này trong khung nhìn ASP.NET MVC là gì?

CHỈNH SỬA: Chỉ cần làm rõ, nó không phải là URL cho chế độ xem/hành động hiện tại cho một hành động khác trong cùng một bộ điều khiển.

Trả lời

20

Để bắt sự thay đổi trong giao thức (http/https), bến cảng khác nhau và các đường dẫn ảo (có thể không phải lúc nào giả sử chúng ta sẽ được ở gốc máy chủ) tôi đã kết thúc với các giải pháp sau đây:

<%= Request.Url.GetLeftPart(System.UriPartial.Authority) + Url.Action("action", "controller")%> 

Tôi đang làm việc để chuyển điều này sang phương thức tiện ích để làm cho nó đẹp hơn.

3

Chỉnh sửa: đối với bất kỳ chế độ xem/bộ điều khiển nào, không chắc chắn bạn sẽ tìm thấy bất kỳ điều gì đơn giản hơn điều này.

http://<%=Request.Url.Host %><%=Url.Action("action", "controller")%> 
+0

'@ Url.Action ("Action", "điều khiển", null, "http")' sẽ ngắn gọn hơn .. –

2

Tôi đã viết một bài đăng trên blog xử lý việc tạo đường dẫn đầy đủ có tên là How to build absolute action URLs using the UrlHelper class. Bạn chắc chắn sẽ muốn kiểm tra điều đó!


Dưới đây là phần mở rộng tôi đề nghị viết:

/// <summary> 
/// Generates a fully qualified URL to an action method by using 
/// the specified action name, controller name and route values. 
/// </summary> 
/// <param name="url">The URL helper.</param> 
/// <param name="actionName">The name of the action method.</param> 
/// <param name="controllerName">The name of the controller.</param> 
/// <param name="routeValues">The route values.</param> 
/// <returns>The absolute URL.</returns> 
public static string AbsoluteAction(this UrlHelper url, 
    string actionName, string controllerName, object routeValues = null) 
{ 
    string scheme = url.RequestContext.HttpContext.Request.Url.Scheme; 

    return url.Action(actionName, controllerName, routeValues, scheme); 
} 
+0

Liên kết tới nội dung của bạn ở đây đã chết. Thay vì liên kết đến các bài đăng trên blog, vui lòng đăng câu trả lời thực tế. –

+0

@JohnBoker Xin lỗi, gần đây tôi đã phá vỡ quy tắc chuyển hướng. Tôi đã cập nhật câu trả lời của mình cho phù hợp. –

0

Request.Url trả về URL đầy đủ bao gồm các giao thức (http: //), url (www.mydomain.com/mypath) và chuỗi truy vấn (? id = 5).

@Request.Url  @*Razor tags*@ 

Đối với các thẻ ASP.NET MVC cổ điển nó sẽ là

<%=Request.Url%> <%'Classic tags%> 
Các vấn đề liên quan