【问题标题】:ASP.NET ApiController inside a webform can't reach methodsWebform 中的 ASP.NET ApiController 无法访问方法
【发布时间】:2019-07-26 09:34:10
【问题描述】:

无论如何我都无法从我的 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 ) 以及如何修复到达的方法?

EDIT2:我在文档中读到我需要全局中的这一行:

RouteConfig.RegisterRoutes(RouteTable.Routes);

但我不使用 MVC 有关系吗?我尝试使用全新的 MVC Web Api 到达路线并产生“无响应”

【问题讨论】:

  • 澄清一下,您是否尝试将 web api 处理程序添加到现有的 asp .net web 表单项目?
  • 事实上我是

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


【解决方案1】:

其余测试工具中要添加的网址是

http://localhost:49342/api/get

方法类型是GET

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

【讨论】:

  • 我确实尝试过使用该网址,但它产生“404”,这是否意味着路由已关闭?您能否详细说明 httpClient 类?非常感谢
  • 请检查我的新答案
【解决方案2】:

在您的控制器上使用路由器前缀。因此,您以

的身份访问 URL http://localhost/routerprefix/路由器

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

下面是一个非常简单的实现。请查看此网址了解更多信息

MSDN sample

HttpClient 客户端 = 新 HttpClient(); HttpResponseMessage 响应 = 等待 client.GetAsync("http://localhost:49342/api/get"); 如果(响应。IsSuccessStatusCode) { 产品 = 等待响应.Content.ReadAsAsync(); }

【讨论】:

  • 哦,我明白了,我可能写错了我的问题或不清楚,因为我不想从 aspx 页面使用 webapi,而是在同一个项目中创建一个单独的 web 服务,这是否会使任何感觉?不是英语母语对不起
  • 你有什么发现吗?
  • 我最终创建了一个带有 SOAP (asmx) 网络服务的单独项目,但我仍然想知道为什么这对未来的项目来说是个问题
【解决方案3】:

从你的设置看,它似乎是正确的

你有:

  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 方法也一样

所以再试一次,你应该可以到达它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多