ApiController ma właściwość o nazwie URL , który jest typu System.Web.Http.Routing.UrlHelper który pozwala skonstruować adresy URL dla kontrolerów API.
Przykład:
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";
}
...
}
Ten UrlHelper nie istnieje ani w widokach, ani w standardowych kontrolerach.
AKTUALIZACJA:
Aby wykonać routing poza ApiController, możesz wykonać następujące czynności:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
lub wewnątrz widoku:
<script type="text/javascript">
var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
$.ajax({
url: url,
type: 'GET',
success: function(result) {
// ...
}
});
</script>
Zwróć uwagę na httproute = ""
znacznik trasy, który jest ważny.
Oczywiście zakłada się, że Twoja trasa API jest wywoływana DefaultApi
w metodzie RegisterRoutes w Global.asax
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
System.Web.Mvc.UrlHelper
do generowania tras interfejsu API poza HttpControllerContext.Działa z prostszą formą,
Url.Action
dzięki czemu nie musisz odwoływać się do żadnych nazw routingu:Możesz dodać,
area = ""
jeśli adres URL jest potrzebny w obszarze. (Kontrolery API są domyślnie poza obszarami). Używam MVC 4.źródło
Url.Action
jest używany z widoku.Url
jest typuSystem.Web.Mvc.UrlHelper
i nie jest mapowany naWebApi
trasy. Dlatego potrzebny jest dodatkowy parametr:new { httproute = "" }
.httproute""
ale to nie jest mapowanie = /@Html.ActionLink("link", "Get", "Servers", new { id = r.idServer, area = "", httproute = "" }, null)
ale zadziałało idealnieChcesz mieć możliwość generowania łączy w sposób bezpieczny dla typów, bez zakodowanych na stałe ciągów znaków (nazw kontrolerów)?
Jest na to bryłka! (napisane przez Marka Seemana)
https://github.com/ploeh/Hyprlinkr
Działa tak:
Trasy jak zwykle:
Uzyskaj adres URL:
Wynik:
źródło
Oto metoda KISS, aby odpowiedzieć na pytanie:
Jeśli jest to kod, którego można użyć do utworzenia adresu URL kontrolera MVC
Aby uzyskać adres URL dla wersji API kontrolera (zakładając, że używasz tej samej nazwy kontrolera), możesz użyć
Wszystko, co robi metoda Url.Action, to dołączanie ścieżki głównej aplikacji z nazwą kontrolera, po której następuje nazwa akcji (chyba że jest to „Indeks”, w którym to przypadku nie jest dodawany. Jeśli obiekt wartości trasy ma identyfikator właściwość wartość jest również dołączana do adresu URL.
źródło
api/
mi nazwy kontrolera przed.