Webform内的ASP.NET ApiController无法访问方法

时间:2019-03-05 01:05:34

标签: asp.net web-services asp.net-web-api asp.net-web-api-routing

无论如何我都无法从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 }
            );
        }
    }
}

我在项目中有更多的Web表单(最初只是带有服务器端代码的html页面,但是我需要添加一些方法来检索和发送数据,非常感谢!

EDIT1:我设法通过更改URL到达HTTP 200,但是无论如何我都无法达到方法(在调试模式下它不会在断点处停止)如何正确路由Api(因此它不是Login.aspx) ),以及如何解决到达的方法?

HTTP 200 but no method reached

EDIT2:我在文档中读到了我需要在全局中使用此行:

RouteConfig.RegisterRoutes(RouteTable.Routes);

但是我不使用MVC没关系吗?我尝试使用全新的MVC Web Api到达路线,但结果为“无响应”

3 个答案:

答案 0 :(得分:1)

在控制器上使用routerprefix。因此,您以

访问该URL
    http://localhost/routerprefix/router

HttpClient类可用于发送和接收HTTP请求和响应。由于您尝试从aspx页面使用WebApi,因此更好的方法是创建HttpClient实例

下面是一个非常简单的实现。请检查此网址以获取更多信息

MSDN sample


    HttpClient client = new HttpClient();

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

答案 1 :(得分:1)

通过您的设置,看起来似乎是正确的

您有:

  1. config.MapHttpAttributeRoutes();-设置属性路线
  2. config.Routes.MapHttpRoute(-设置默认路由
  3. GlobalConfiguration.Configure(WebApiConfig.Register);-在启动时注册

所以它应该工作。

我认为您遇到的问题是调用方式

WebAPI路由与MVC略有不同

例如:

在get方法中,路由设置如下

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

所以您应该使用GET http方法将其命名为{host}/api/get

在屏幕快照中,您正在使用{host}/api/get/Get进行呼叫-由于路由不匹配,因此无法正常工作

与您的POST方法相同

因此,再尝试一次,您应该可以实现

答案 2 :(得分:0)

要在其余测试工具中添加的URL是

http://localhost:49342/api/get

方法类型为GET

如果要从aspx页面调用此Web api,请使用httpClient类。