In ASP.NET MVC, abbiamo @Url.Action
per le azioni. C'è qualcosa di simile allo @Url.Api
che si dirigerebbe verso/api/controller?Come creare l'URL API Web ASP.NET?
risposta
Il ApiController ha una proprietà denominata Url che è di tipo System.Web.Http.Routing.UrlHelper che consente di creare URL per i controller API.
Esempio:
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";
}
...
}
Questa UrlHelper non esiste né in vostro punto di vista, né nei controllori standard.
UPDATE:
E per fare fuori il routing di un ApiController si potrebbe procedere come segue:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
o all'interno di una vista:
<script type="text/javascript">
var url = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "values", id = "123" })';
$.ajax({
url: url,
type: 'GET',
success: function(result) {
// ...
}
});
</script>
Avviso del httproute = ""
token di rotta che è importante.
Ovviamente questo presuppone che il percorso Api si chiama DefaultApi
nel metodo RegisterRoutes in Global.asax
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Funziona con la forma più semplice di Url.Action
quindi non devi fare riferimento a tutti i nomi di routing:
Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })
È possibile aggiungere un area = ""
se l'URL è necessario all'interno di un'area. (I controller Api sono al di fuori delle aree per impostazione predefinita.) Sto utilizzando MVC 4.
UrlHelper in Web Api è http: // msdn.microsoft.com/en-us/library/system.web.http.routing.urlhelper(v=vs.108).aspx, non ha un metodo di azione. –
@YuriyFaktorovich Questo post implica che 'Url.Action' viene utilizzato da una vista. 'Url' è di tipo' System.Web.Mvc.UrlHelper', e non si associa alle rotte 'WebApi'. Questo è il motivo per cui hai bisogno del parametro extra: 'new {httproute =" "}'. – Jesse
Ho aggiunto 'httproute" "' ma non sta mappando =/ – Maslow
Vuoi essere in grado di generare collegamenti in modo typesable, senza stringhe codificate (nomi controller)?
C'è un nuget per questo!(Ed è scritto da Mark Seeman)
https://github.com/ploeh/Hyprlinkr
funziona così:
Routes, come al solito:
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
ottenere un URL:
var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));
Risultato:
http://localhost/api/foo/1337
Ecco il metodo Kiss per rispondere alla domanda:
Se questo è il codice che si usa per creare un controller URL MVC
@Url.Action("Edit", "MyController")
Al fine di ottenere un URL per le API versione del controller (supponendo che si utilizza lo stesso nome del controller) è possibile utilizzare
@Url.Action("Edit", "api/MyController")
Tutto il metodo Url.Action sta facendo è aggiungendo il percorso principale dell'applicazione, con la c nome ontroller, seguito dal nome dell'azione (a meno che non sia "Index", nel qual caso non viene aggiunto. se l'oggetto dei valori di percorso ha una proprietà id, anche il valore viene aggiunto all'URL.
- 1. Autenticazione API Web ASP.NET
- 2. API Web ASP.NET CacheControl
- 3. Autenticazione con ASP.NET Web API
- 4. ASP.NET MVC o API Web ASP.NET + AngularJS
- 5. API Web ASP.NET in IE
- 6. API Web ASP.NET ActionFilter esempio
- 7. API Web ASP.NET con DotNetOpenAuth
- 8. Transazioni con API WEB ASP.net
- 9. ASP.net Web API e System.Net.Http
- 10. API Web ASP.NET download testo
- 11. Come leggere XML da API Web ASP.NET?
- 12. ASP.NET Web Api in Web costituisce
- 13. Pagina Web ASP.Net Web Api basata sull'autorizzazione
- 14. ASP.NET Web Api e UrlDecode
- 15. Registrazione di dati in API Web asp.net
- 16. Come creare moduli Web flessibili in ASP.NET
- 17. Metodo di accesso API Web ASP.NET
- 18. Instradamento sottocartella ASP.NET Web Api Controller
- 19. ASP.NET Web API Architettura Suggerimenti/Feedback
- 20. ASP.Net Web Api + KnockoutJs + MVC4 - Legare insieme
- 21. API Web ASP.net - Aggiungi nome array all'output
- 22. Ritorno da ASP.NET 5 Web API
- 23. aggiornamento parziale con asp.net web api
- 24. Personalizzazione del routing Web Api ASP.NET
- 25. Gestori di messaggi API Web ASP.NET
- 26. Chiamare API Web ASP.NET da code-behind
- 27. Test del controller API Web ASP.NET
- 28. API di controllo ASP.NET Web Serializer specifico
- 29. Asp.net Web api 2 Login Facebook
- 30. Genera schema JSON per API Web ASP.Net
Che .. davvero non mi aiuta molto dal momento che ho bisogno della mia vista per essere in grado di generare URL in modo sicuro. Se esiste una licenza Go Live, qual è il modo "Go Live" per creare URL nella vista? –
Ancora più importante, questo non funzionerà se utilizzi ASP.Net Development Server poiché cambia le porte continuamente, quindi non puoi nemmeno aggiungere l'URL nella vista. –
@ShaneCourtrille, ho aggiornato la mia risposta per illustrare come utilizzare il normale 'System.Web.Mvc.UrlHelper' per generare percorsi Api al di fuori di un HttpControllerContext. –