none
¿Como acceder a un controlador de Api ? RRS feed

  • Pregunta

  • Hola...

    Tengo una aplicacion Asp.Net Core y en la carpeta Controller agregue un controlador de API  y en este un metodo UploadFileMethod  ahora 

    ¿Como puedo acceder a este?  he probado con varias URLs y me devuelve error 404 Not Found -> no lo encuentra

    ¿Que debo hacer para solucionar esto?

    namespace MyApp.Controllers { [Route("api/[controller]")] [ApiController] public class ExternalController : ControllerBase { [HttpPost] [AllowAnonymous] public string UploadFileMethod(IFormFile file) { if (file != null) {

    try { string path = Path.Combine("Archivos", file.FileName); var stream = System.IO.File.Create(path); file.CopyTo(stream); stream.Dispose(); } catch (Exception ex) {

    return ex.ToString(); } } else {

    return "null"; } return "Test+"; } } }



    EFRAIN MEJIAS C VALENCIA - VENEZUELA


    viernes, 16 de abril de 2021 16:51

Respuestas

  • Tienes que tener en cuenta que le has asignado una ruta distinta de la predeterminada con el atributo Route. Pero tienes un valor muy raro, has puesto [Route("api/[controller]")] cuando lo normal es poner ahí el RoutePrefix, y dejar el Route para el método de acción.

    Te recomiendo que primero pruebes sin ponerle nada al controlador, y en cambio pónselo al método. Es decir, quita del controller el atributo [Route("api/[controller]")], y en su lugar ponle una ruta razonable al método. Por ejemplo:

        // Aquí no ponemos Route
        [ApiController]
        public class ExternalController : ControllerBase
        {
            [HttpPost]
            [AllowAnonymous]
            [Route("api/Patata/SubirFichero")]
            public string UploadFileMethod(IFormFile file)
            {

    Entonces para llamar a UploadFileMethod tienes que hacer un POST a http://tusitioweb/api/Patata/SubirFichero.

    Hay muchas más formas de configurarlo, como por ejemplo quitar todas las rutas del controlador y tomar el comportamiento predeterminado del mapa de rutas, o poner un prefijo de ruta en el controller y luego usar el Route en los métodos de acción para indicar lo que va detrás del prefijo. Pero frecuentemente lo que resulta más sencillo es simplemente poner un Route en el propio método de acción.

    viernes, 16 de abril de 2021 18:37

Todas las respuestas

  • Hola Efraín,

    Gracias por levantar tu consulta en los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    viernes, 16 de abril de 2021 18:27
    Moderador
  • Tienes que tener en cuenta que le has asignado una ruta distinta de la predeterminada con el atributo Route. Pero tienes un valor muy raro, has puesto [Route("api/[controller]")] cuando lo normal es poner ahí el RoutePrefix, y dejar el Route para el método de acción.

    Te recomiendo que primero pruebes sin ponerle nada al controlador, y en cambio pónselo al método. Es decir, quita del controller el atributo [Route("api/[controller]")], y en su lugar ponle una ruta razonable al método. Por ejemplo:

        // Aquí no ponemos Route
        [ApiController]
        public class ExternalController : ControllerBase
        {
            [HttpPost]
            [AllowAnonymous]
            [Route("api/Patata/SubirFichero")]
            public string UploadFileMethod(IFormFile file)
            {

    Entonces para llamar a UploadFileMethod tienes que hacer un POST a http://tusitioweb/api/Patata/SubirFichero.

    Hay muchas más formas de configurarlo, como por ejemplo quitar todas las rutas del controlador y tomar el comportamiento predeterminado del mapa de rutas, o poner un prefijo de ruta en el controller y luego usar el Route en los métodos de acción para indicar lo que va detrás del prefijo. Pero frecuentemente lo que resulta más sencillo es simplemente poner un Route en el propio método de acción.

    viernes, 16 de abril de 2021 18:37
  • Gracias Alberto Poblacion ...

    Pruebo y te comento


    EFRAIN MEJIAS C VALENCIA - VENEZUELA

    viernes, 16 de abril de 2021 18:41