L' ApiController a une propriété appelée Url qui est de type System.Web.Http.Routing.UrlHelper qui vous permet de créer des URL pour les contrôleurs d'API.
Exemple:
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";
}
...
}
Cet UrlHelper n'existe ni dans vos vues ni dans les contrôleurs standard.
METTRE À JOUR:
Et pour effectuer le routage en dehors d'un ApiController, vous pouvez effectuer les opérations suivantes:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
ou à l'intérieur d'une vue:
<script type="text/javascript">
var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
$.ajax({
url: url,
type: 'GET',
success: function(result) {
// ...
}
});
</script>
Notez le httproute = ""
jeton d'itinéraire qui est important.
Évidemment, cela suppose que votre route Api est appelée DefaultApi
dans votre méthode RegisterRoutes dans Global.asax
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
System.Web.Mvc.UrlHelper
pour générer des routes Api en dehors d'un HttpControllerContext.Cela fonctionne avec la forme la plus simple de
Url.Action
sorte que vous ne devez référencer aucun nom de routage:Vous pouvez ajouter un
area = ""
si l'URL est nécessaire dans une zone. (Les contrôleurs Api sont en dehors des zones par défaut.) J'utilise MVC 4.la source
Url.Action
est utilisé à partir d'une vue.Url
est de typeSystem.Web.Mvc.UrlHelper
et ne correspond pas auxWebApi
itinéraires. Ceci est la raison pour laquelle vous avez besoin du paramètre supplémentaire:new { httproute = "" }
.httproute""
mais ce n'est pas du mappage = /@Html.ActionLink("link", "Get", "Servers", new { id = r.idServer, area = "", httproute = "" }, null)
mais cela a parfaitement fonctionnéVous voulez être en mesure de générer des liens de manière sécurisée, sans chaînes codées en dur (noms de contrôleur)?
Il y a une pépite pour ça! (et c'est écrit par Mark Seeman)
https://github.com/ploeh/Hyprlinkr
Fonctionne comme ceci:
Itinéraires, comme d'habitude:
Obtenez une URL:
Résultat:
la source
Voici la méthode KISS pour répondre à la question:
S'il s'agit du code que vous utiliseriez pour créer une URL de contrôleur MVC
Afin d'obtenir une URL pour la version API du contrôleur (en supposant que vous utilisez le même nom de contrôleur), vous pouvez utiliser
Tout ce que fait la méthode Url.Action est d'ajouter le chemin racine de l'application, avec le nom du contrôleur, suivi du nom de l'action (sauf s'il s'agit de "Index", auquel cas il n'est pas ajouté. Si l'objet de valeurs d'itinéraire a un identifiant property la valeur est également ajoutée à l'URL.
la source
api/
avant mon contrôleur.