Trong ASP.NET MVC, chúng tôi có @Url.Action
cho các hành động. Có cái gì đó tương tự như @Url.Api
mà sẽ định tuyến đến/api/điều khiển?Cách tạo Url ASP.NET Web API?
Trả lời
ApiController có thuộc tính được gọi là Url thuộc loại System.Web.Http.Routing.UrlHelper cho phép bạn tạo url cho bộ điều khiển api.
Ví dụ:
public class ValuesController : ApiController
{
// GET /api/values
public IEnumerable<string> Get()
{
// returns /api/values/123
string url = Url.Route("DefaultApi", new { controller = "values", id = "123" });
return new string[] { "value1", "value2" };
}
// GET /api/values/5
public string Get(int id)
{
return "value";
}
...
}
UrlHelper này không tồn tại không phải trong quan điểm của bạn cũng không phải trong các bộ điều khiển tiêu chuẩn.
UPDATE:
Và để làm việc định tuyến bên ngoài của một ApiController bạn có thể làm như sau:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
hoặc bên trong một cái nhìn:
<script type="text/javascript">
var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
$.ajax({
url: url,
type: 'GET',
success: function(result) {
// ...
}
});
</script>
Thông báo các httproute = ""
mã thông báo lộ trình quan trọng.
Rõ ràng điều này giả định rằng tuyến đường Api của bạn được gọi DefaultApi
trong phương pháp RegisterRoutes của bạn trong Global.asax
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Nó hoạt động với hình thức đơn giản của Url.Action
do đó bạn không cần phải tham khảo bất kỳ tên Routing:
Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })
Bạn có thể muốn thêm area = ""
nếu cần URL trong một Khu vực. (Mặc định là các bộ điều khiển Api bên ngoài các Vùng.) Tôi đang sử dụng MVC 4.
UrlHelper trong Web Api là http: // msdn.microsoft.com/en-us/library/system.web.http.routing.urlhelper(v=vs.108).aspx, nó không có phương thức hành động. –
@YuriyFaktorovich Bài đăng này ngụ ý rằng 'Url.Action' đang được sử dụng từ Chế độ xem. 'Url' thuộc loại' System.Web.Mvc.UrlHelper' và nó không ánh xạ tới các tuyến 'WebApi'. Đây là lý do tại sao bạn cần tham số bổ sung: 'new {httproute =" "}'. – Jesse
Tôi đã thêm 'httproute" "' nhưng nó không được ánh xạ =/ – Maslow
Muốn có thể tạo liên kết theo cách an toàn, không có chuỗi cứng (tên bộ điều khiển)?
Có một cái nuget cho điều đó!(Và nó được viết bởi Mark Seeman)
https://github.com/ploeh/Hyprlinkr
trình như thế này:
đường, như thường lệ:
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
Get URL:
var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));
Kết quả:
http://localhost/api/foo/1337
Dưới đây là phương pháp KISS để trả lời câu hỏi:
Nếu đây là đoạn code mà bạn sẽ sử dụng để tạo ra một URL khiển MVC
@Url.Action("Edit", "MyController")
Để có được một URL cho API phiên bản của bộ điều khiển (giả sử bạn sử dụng cùng tên bộ điều khiển), bạn có thể sử dụng
@Url.Action("Edit", "api/MyController")
Tất cả các phương thức đang thực hiện đang thêm đường dẫn gốc của ứng dụng, với c ontroller name, theo sau là tên hành động (trừ khi nó là "Index" trong trường hợp nó không được nối thêm. nếu đối tượng giá trị tuyến đường có thuộc tính id thì giá trị cũng được nối vào URL.
- 1. ASP.NET Web Api trong Web tạo
- 2. Authentication với ASP.NET Web API
- 3. Xác thực API Web ASP.NET
- 4. API Web ASP.NET trong IE
- 5. ASP.net Web API và System.Net.Http
- 6. Cách chuyển email dưới dạng tham số ở cuối URL trong API web ASP.NET MVC?
- 7. ASP.NET Web Api và UrlDecode
- 8. ASP.NET Web API với DotNetOpenAuth
- 9. Đăng dữ liệu lên asp.net Web API
- 10. Giao dịch với ASP.net WEB API
- 11. Gọi ASP.NET Web API từ mã sau
- 12. ASP.NET Web API và [Serializable] class
- 13. ASP.NET Web API có thể hoạt động trên cùng một url với MVC không?
- 14. Phiên ASP.NET Web API hay gì đó?
- 15. ASP.NET Web API Framework 4.5 Lỗi IIS7
- 16. Tùy chỉnh định tuyến ASP.NET Web Api
- 17. ASP.NET Web API, khám phá dịch vụ web và tạo khách hàng
- 18. Tài nguyên lồng nhau trên Web API trong URL
- 19. Cách xác thực tải lên tệp trong ASP.NET Web API
- 20. Ví dụ về ASP.NET Web API ActionFilter
- 21. AngularJS + ASP.NET Web API Cross-Domain Issue
- 22. WCF Service vs ASP.NET Web Api
- 23. Tuỳ chỉnh Routing với ASP.NET Web API
- 24. Autofac và ASP.NET Web API ApiController
- 25. Chuyển hướng từ trang web asp.net api post action
- 26. ASP.Net Web Api + KnockoutJs + MVC4 - Kết hợp nó với nhau
- 27. Nhiều phương pháp PUT trong ASP.NET Web API
- 28. Mẫu thiết kế để tạo URL API
- 29. ASP.NET đúc web API http đối phó với mảng json
- 30. Hành động API Web phiên bản trong ASP.NET MVC 4
Điều đó thực sự không giúp tôi nhiều vì tôi cần Chế độ xem của tôi để có thể tạo Url một cách an toàn. Nếu có giấy phép Go Live, cách 'Phát trực tiếp' để tạo url trên Chế độ xem là gì? –
Quan trọng hơn là điều này sẽ không hoạt động nếu bạn đang sử dụng ASP.Net Development Server vì nó thay đổi cổng mọi lúc, do đó bạn thậm chí không thể tìm thấy url trong khung nhìn. –
@ShaneCourtrille, tôi đã cập nhật câu trả lời của mình để minh họa cách bạn có thể sử dụng 'System.Web.Mvc.UrlHelper' bình thường để tạo ra các tuyến Api bên ngoài một HttpControllerContext. –