【问题标题】:cannot connect to Web API无法连接到 Web API
【发布时间】:2015-10-26 05:19:50
【问题描述】:

我是 WebAPI 编程的新手。这就是我所做的

  1. 在 Visual Studio 2013 中创建 ASP.NET Web 应用程序 SampleWebApiProject
    在 .NET Framework 4.5.2 下

  2. 选择 MVC 并检查 [Add Folders and core references for] 下的 Web API。

  3. 使用Nuget包安装knockout.js、knockout-validation.js等

在我的 Login.cshtml 代码中,我有 html 按钮

    <div>
        <button type="button" class="btn btn-info" data-bind="click:$parent.login">
          Login
       </button>
   </div>

在我的点击按钮上我有

  self.viewModelHelper.apiPost('api/account/login', unmappedModel,
                function (result) {

        }

我创建了名为AccountApiController的API控制器

 public class AccountApiController : ApiController
 {

    [HttpPost]
    [POST("api/account/login")]
    public HttpResponseMessage Login(HttpRequestMessage request, [FromBody]AccountLoginModel accountModel)
    {
        return null;
    }
}

但是,当我在 Chrome 开发者工具中检查点击事件时,我得到一个错误响应

POST http://localhost:64436/api/account/login 404 (Not Found).

这是我的 WebApiConfig

// Web API routes
config.MapHttpAttributeRoutes();

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

我是否在使用正确类型的应用程序?

截图

【问题讨论】:

    标签: javascript c# asp.net asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    试试:

      self.viewModelHelper.apiPost('api/accountapi/login', unmappedModel,
                function (result) {
    
        }
    

    和 API 控制器

    public class AccountApiController : ApiController
    {
    
        [HttpPost]
        [POST("api/accountapi/login")]
        public HttpResponseMessage Login(HttpRequestMessage request, [FromBody]AccountLoginModel accountModel)
        {
            return null;
        }
    }
    

    您的帐户控制器名为 accountapi 而不是帐户,因此 webapi 找不到任何名为 account 的控制器。

    【讨论】:

      【解决方案2】:

      我不确定,但您的参数在您的 webapi 控制器中看起来有问题...

      为什么要添加 HttpRequestMessage 作为参数?

      【讨论】:

        【解决方案3】:

        你已经调用了你的控制器AccountApiController,所以api/account/login应该是accountapi/login

        【讨论】:

          【解决方案4】:

          Web API 对 MVC 架构有严格的调用。

          如果您调用 POST。这意味着 API 将真正创建一个新实体,并且不会返回其他请求。

          也就是说,WebAPI 并不是你想的那样的自定义 API 函数调用。

          在 MVC 应用程序中创建 Web API 不同于创建单独的 API。

          这里有一些注释。

          • GET : 检索实体
          • PUT:更新实体
          • POST : 创建一个新实体
          • DELETE:删除现有实体。

          假设您有一个用于帐户模型的 API。我会在创建 Web API 时说模型原因。你需要一个模型。除非您正在创建自定义 API。在 MVC 之外。

          现在你做到了。 api/帐户/测试 它将做的是使用 [GET] 函数。

          无论您在帐户控制器中具有 [GET] 数据注释的任何功能都将被执行。还给你一些东西。

          不。不要使用 Login 作为方法的名称,只需使用 GET,因为您无法真正告诉 Web API 使用哪个函数。它将使用带有 GET 数据注释的那个。所以进入 api/account/ login

          [HttpGet]
          
          public IEnumerable<string> Get()
          {
              return "No Value";
          }
          
          [HttpGet("{id}")]
          
          public IEnumerable<string> Get(int id)
          {
              return "There is a value";
          }
          

          现在,如果您希望调用 POST。只需创建一个具有 POST 方法的表单。或 JQuery Javascript 并调用为它们生成 POST 方法。您不能在地址栏中编写方法调用。你只需要使用正确的请求来调用特定的函数或重载函数。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-12
            • 2022-01-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多