En ASP.NET MVC, tenemos @Url.Action
para acciones. ¿Hay algo similar como @Url.Api
que se dirigiría a/api/controller?¿Cómo crear ASP.NET Web API Url?
Respuesta
El ApiController tiene una propiedad llamada Url que es del tipo System.Web.Http.Routing.UrlHelper que le permite construir urls para controladores api.
Ejemplo:
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";
}
...
}
no existe Este UrlHelper ni en sus puntos de vista ni en los controladores estándar.
ACTUALIZACIÓN:
Y con el fin de hacer enrutamiento exterior de un ApiController que podría hacer lo siguiente:
public class HomeController : Controller
{
public ActionResult Index()
{
string url = Url.RouteUrl(
"DefaultApi",
new { httproute = "", controller = "values", id = "123" }
);
return View();
}
}
o dentro de un punto de 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>
Aviso del httproute = ""
token de ruta, que es importante.
Obviamente, esto asume que la ruta Api se llama DefaultApi
en su método RegisterRoutes en Global.asax
:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Funciona con la forma más simple de Url.Action
por lo tanto usted no tiene que hacer referencia a los nombres de enrutamiento:
Url.Action("ActionName", "ControllerName", new { httproute = "DefaultApi" })
Es posible que desee agregar un area = ""
si la URL es necesaria dentro de un Área. (Los controladores Api están fuera de Areas por defecto.) Estoy usando MVC 4.
El UrlHelper en Web Api es http: // msdn.microsoft.com/en-us/library/system.web.http.routing.urlhelper(v=vs.108).aspx, no tiene un método de acción. –
@YuriyFaktorovich Esta publicación implica que 'Url.Action' se está utilizando desde una Vista. 'Url' es del tipo' System.Web.Mvc.UrlHelper', y no se asigna a las rutas 'WebApi'. Es por eso que necesita el parámetro adicional: 'new {httproute =" "}'. – Jesse
Agregué 'httproute" "' pero no está mapeando =/ – Maslow
¿Desea poder generar enlaces de forma segura, sin cadenas codificadas (nombres de controlador)?
¡Hay un nuget para eso!(Y está escrito por Mark Seeman)
https://github.com/ploeh/Hyprlinkr
funciona así:
rutas, como de costumbre:
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
obtener una URL:
var linker = new RouteLinker(request);
var uri = linker.GetUri<FooController>(r => r.GetById(1337));
Resultado:
http://localhost/api/foo/1337
Aquí es el método de KISS para responder a la pregunta: ¿
Si este es el código que se usaría para crear una URL controlador MVC
@Url.Action("Edit", "MyController")
Con el fin de obtener una URL de la API versión del controlador (suponiendo que se utiliza el mismo nombre de controlador) que puede utilizar
@Url.Action("Edit", "api/MyController")
Todo el método Url.Action está haciendo es anexar la ruta raíz de la aplicación, con el c nombre del ontroller, seguido del nombre de la acción (a menos que sea "Index", en cuyo caso no se agrega). si el objeto de valores de ruta tiene una propiedad de id, el valor también se agrega a la URL.
- 1. Asp.Net Web Api - ModelBinders
- 2. autenticación con ASP.NET Web API
- 3. ASP.NET Web API con DotNetOpenAuth
- 4. ASP.net Web API y System.Net.Http
- 5. ASP.NET Web API en IE
- 6. Cómo configurar Elmah con ASP.NET Web API
- 7. Cómo crear API de sitio web
- 8. ¿Cómo debo crear una buena API (web)
- 9. ASP.NET Web API Web en forma
- 10. Redirect from asp.net web api post action
- 11. ASP.NET Web API descargar texto
- 12. Transacciones con ASP.net WEB API
- 13. ASP.NET Web API ActionFilter ejemplo
- 14. ASP.NET Web Api y UrlDecode
- 15. ASP.NET Web API: proveedor de servicios OAuth
- 16. ASP.Net Web Api + KnockoutJs + MVC4 - Vincularlo
- 17. Autenticación y Autenticación API Web ASP.NET
- 18. Cómo crear mi propia API web/Servicio web
- 19. Cómo crear formularios web flexibles en ASP.NET
- 20. cómo crear un sitio web ASP.Net conectable?
- 21. Cómo cambiar la ruta predeterminada en asp.net web api
- 22. Llamar ASP.NET Web API desde código subyacente
- 23. Autenticación de la API web de ASP.NET
- 24. actualización parcial con asp.net web api
- 25. Cómo crear un servicio web API en PHP
- 26. ASP.NET Web API Questions - Autorización/Autenticación
- 27. ASP.NET Web API devuelve DTO cuestionables?
- 28. Enviando mensaje con 401: Asp.net Web-api
- 29. Gestión de excepciones ASP.NET MVC Web API
- 30. SynchronizationContext y ASP.NET Web API Extensibility Points
Eso ... realmente no me sirve de mucho ya que necesito mi Vista para poder generar Urls de forma segura. Si hay una licencia de Go Live, ¿cuál es la forma de 'Activar' para crear URL en la Vista? –
Más importante aún, esto no funcionará si está utilizando ASP.Net Development Server, ya que cambia de puerto todo el tiempo, por lo que no puede ni siquiera dañar la url en la vista. –
@ShaneCourtrille, he actualizado mi respuesta para ilustrar cómo se puede usar el 'System.Web.Mvc.UrlHelper' normal para generar rutas Api fuera de un HttpControllerContext. –