The ApiController memiliki sifat yang disebut Url yang tipe System.Web.Http.Routing.UrlHelper yang memungkinkan Anda untuk membangun url untuk pengendali api.
Contoh:
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 ini tidak ada di tampilan Anda maupun di pengontrol standar.
MEMPERBARUI:
Dan untuk melakukan perutean di luar ApiController Anda dapat melakukan hal berikut:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
atau di dalam tampilan:
<script type="text/javascript">
var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
$.ajax({
url: url,
type: 'GET',
success: function(result) {
// ...
}
});
</script>
Perhatikan httproute = ""
token rute mana yang penting.
Jelas ini mengasumsikan bahwa rute Api Anda dipanggil DefaultApi
dalam metode RegisterRoutes Anda di Global.asax
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
System.Web.Mvc.UrlHelper
untuk menghasilkan rute Api di luar HttpControllerContext.Ini bekerja dengan bentuk yang lebih sederhana
Url.Action
sehingga Anda tidak perlu merujuk nama Perutean apa pun:Anda mungkin ingin menambahkan
area = ""
jika URL dibutuhkan dalam suatu Area. (Pengontrol api berada di luar Area secara default.) Saya menggunakan MVC 4.sumber
Url.Action
sedang digunakan dari View.Url
adalah tipeSystem.Web.Mvc.UrlHelper
, dan tidak memetakan keWebApi
rute. Inilah sebabnya mengapa Anda memerlukan parameter tambahan:new { httproute = "" }
.httproute""
tetapi tidak memetakan = /@Html.ActionLink("link", "Get", "Servers", new { id = r.idServer, area = "", httproute = "" }, null)
tetapi itu bekerja dengan sempurnaIngin dapat membuat tautan dengan cara yang aman, tanpa string hardcode (nama pengontrol)?
Ada nuget untuk itu! (dan itu ditulis oleh Mark Seeman)
https://github.com/ploeh/Hyprlinkr
Bekerja seperti ini:
Rute, seperti biasa:
Dapatkan URL:
Hasil:
sumber
Berikut metode KISS untuk menjawab pertanyaan tersebut:
Jika ini adalah kode yang akan Anda gunakan untuk membuat URL pengontrol MVC
Untuk mendapatkan URL untuk versi API dari pengontrol (dengan asumsi Anda menggunakan nama pengontrol yang sama), Anda dapat menggunakan
Semua metode Url.Action yang dilakukan adalah menambahkan jalur root aplikasi, dengan nama pengontrol, diikuti dengan nama tindakan (kecuali "Indeks" dalam hal ini tidak ditambahkan. Jika objek rute nilai memiliki id properti nilainya juga ditambahkan ke URL.
sumber
api/
sebelum nama pengontrol saya.