Dans ASP.NET MVC, nous avons @Url.Actiondes actions. Y a-t-il quelque chose de similaire comme @Url.Apiqui serait acheminé vers / api / controller?
Dans ASP.NET MVC, nous avons @Url.Actiondes actions. Y a-t-il quelque chose de similaire comme @Url.Apiqui serait acheminé vers / api / controller?
Réponses:
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 DefaultApidans votre méthode RegisterRoutes dans Global.asax:
routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
              System.Web.Mvc.UrlHelperpour générer des routes Api en dehors d'un HttpControllerContext.
                    Cela fonctionne avec la forme la plus simple de Url.Actionsorte que vous ne devez référencer aucun nom de routage:
Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })
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.
Url.Actionest utilisé à partir d'une vue. Urlest de type System.Web.Mvc.UrlHelperet ne correspond pas aux WebApiitiné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:
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
Obtenez une URL:
var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));
Résultat:
http://localhost/api/foo/1337
              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
@Url.Action("Edit", "MyController")
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
@Url.Action("Edit", "api/MyController")
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.
api/avant mon contrôleur.