问题
I can't reach any methods from my ApiController in anyway, the routing does appear if i try to reach it by a browser but no methods are shown.
My Controller:
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;
        }
    }
}
my global asax:
namespace AgroRiego
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }
}
and my 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 }
            );
        }
    }
}
i have more webforms inside the project (originally it was just html pages with serverside code, but i need to add a couple methods to retrieve and send data, help much appreciated!
EDIT1: i managed to reach HTTP 200 changing the URL but i can't reach the methods anyway (in debug mode it does not stop on the breakpoints) how can i route correctly the Api (so it is not Login.aspx) and how do i fix the methods reaching?
EDIT2: i read in documentation that i need this line in global:
RouteConfig.RegisterRoutes(RouteTable.Routes);
but im not using MVC does that matter? i tried reaching the routes with a brand new MVC Web Api and it yields "No Response"
回答1:
use a routerprefix with your controller. So you access the URL as
    http://localhost/routerprefix/router
HttpClient class can be use to send and receive HTTP requests and responses. Since you are trying to consume a WebApi from a aspx page, better way is to create a HttpClient instance
Below is a very simple implementation. Please check this url for further information
MSDN sample
    HttpClient client = new HttpClient();
    HttpResponseMessage response = await client.GetAsync("http://localhost:49342/api/get");
    if (response.IsSuccessStatusCode)
    {
        product = await response.Content.ReadAsAsync();
    }
 
    回答2:
By the look of your set up, it seems correct
you have got:
- config.MapHttpAttributeRoutes();- setup the attribute route
- config.Routes.MapHttpRoute(- setup the default route
- GlobalConfiguration.Configure(WebApiConfig.Register);- to register at startup
so it should work.
I think the problem you are having is the way you are calling it
WebAPI routing work a little different to MVC
for example:
In you get method, the route is set as below
[HttpGet, Route("api/get")]
so you should call it {host}/api/get using a GET http method
in the screen shot, you are calling using {host}/api/get/Get - which would not have work, because no route would match
Same for your POST method
So give it another try and you should be able to reach it
回答3:
The URL to add in the rest testing tool is
http://localhost:49342/api/get
Method type is GET
If you are calling this web api from aspx page use the httpClient class.
来源:https://stackoverflow.com/questions/54993969/asp-net-apicontroller-inside-a-webform-cant-reach-methods