ASP.NET ApiController внутри веб-формы не может достичь методов - PullRequest
0 голосов
/ 05 марта 2019

В любом случае я не могу получить доступ к каким-либо методам из моего ApiController, маршрутизация появляется, если я пытаюсь получить доступ к нему через браузер, но методы не отображаются.

Мой контроллер:

namespace AgroRiego.Controllers
{
    public class datacontrol : ApiController
    {
        [HttpGet, Route("api/get")]
        public string Get([FromUri]string user, string pass)
        {
            string check = SQL.Reader("SELECT * FROM users WHERE username='" + user + "' AND password='" + pass + "'");
            if (String.IsNullOrWhiteSpace(check))
            {
                return "error en credenciales";
            }
            DataTable horarios = SQL.table_read("SELECT * FROM horario_riego");
            string json = Utils.ConvertDataTabletoJSON(horarios);

            return json;
        }

        [HttpPost, Route("api/post")]
        public void Post([FromBody]string value)
        {
            string i = value;
        }
    }
}

мой глобальный asax:

namespace AgroRiego
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }
}

и мой webapiconfig:

namespace AgroRiego
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Configuración y servicios de API web

            // Rutas de API web
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

У меня есть больше веб-форм внутри проекта (изначально это были просто HTML-страницы с серверным кодом, но мне нужнодобавить пару методов для извлечения и отправки данных, очень ценная помощь!

EDIT1: мне удалось достичь HTTP 200, изменив URL, но я все равно не могу добраться до методов (в режиме отладки он не останавливается наточки останова) как я могу правильно направить API (так что это не Login.aspx) и как я могу исправить методы достижения?

HTTP 200 but no method reached

EDIT2: я прочитал в документации, что мне нужна эта строка в глобальном масштабе:

RouteConfig.RegisterRoutes(RouteTable.Routes);

, но я не использую MVC, имеет ли это значение? Я попытался достичь маршрутов с совершенно новым MVC Web Api, и он выдает «No Response»

Ответы [ 3 ]

0 голосов
/ 07 марта 2019

используйте префикс роутера с вашим контроллером.Таким образом, вы получаете доступ к URL-адресу как

    http://localhost/routerprefix/router

. Класс HttpClient можно использовать для отправки и получения HTTP-запросов и ответов.Поскольку вы пытаетесь использовать WebApi со страницы aspx, лучше создать экземпляр HttpClient

Ниже приведена очень простая реализация.Пожалуйста, проверьте этот URL для получения дополнительной информации

MSDN образец


    HttpClient client = new HttpClient();

    HttpResponseMessage response = await client.GetAsync("http://localhost:49342/api/get");
    if (response.IsSuccessStatusCode)
    {
        product = await response.Content.ReadAsAsync();
    }

0 голосов
/ 15 марта 2019

На первый взгляд кажется, что все правильно

у вас есть:

  1. config.MapHttpAttributeRoutes(); - настроить атрибут route
  2. config.Routes.MapHttpRoute(- установить маршрут по умолчанию
  3. GlobalConfiguration.Configure(WebApiConfig.Register); - зарегистрироваться при запуске

, чтобы он работал.

Я думаю, что проблема у вас заключается в том, как вы

маршрутизация WebAPI работает немного иначе, чем MVC

, например:

В методе get маршрут задан следующим образом

[HttpGet, Route("api/get")]

, поэтому вы должны назвать его {host}/api/get, используя метод GET http

на снимке экрана, вы звоните, используя {host}/api/get/Get - который не будет работать, потому что ни один маршрут не будетматч

То же самое для вашего метода POST

Так что попробуйте еще раз, и вы сможете его достичь

0 голосов
/ 05 марта 2019

URL-адрес, который нужно добавить в инструмент тестирования остальных:

http://localhost:49342/api/get

Тип метода: GET

Если вы вызываете этот веб-API со страницы aspx, используйте класс httpClient.

...