Javascript 无法连接到Web API

Javascript 无法连接到Web API,javascript,c#,asp.net,asp.net-mvc-4,asp.net-web-api,Javascript,C#,Asp.net,Asp.net Mvc 4,Asp.net Web Api,我是WebAPI编程新手。以下是我所做的 在Visual Studio 2013中创建ASP.NET web应用程序SampleWebApiProject 在.NET Framework 4.5.2下 选择MVC,并在[Add Folders and core Reference for]下选中Web API 使用Nuget软件包安装knockout.js、knockout-validation.js等 在我的Login.cshtml代码中,我有一个html按钮 登录 在我的点击按钮上我有

我是WebAPI编程新手。以下是我所做的

  • 在Visual Studio 2013中创建ASP.NET web应用程序
    SampleWebApiProject

    在.NET Framework 4.5.2下

  • 选择
    MVC
    ,并在[Add Folders and core Reference for]下选中Web API

  • 使用Nuget软件包安装knockout.js、knockout-validation.js等

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

    
    登录
    
    在我的点击按钮上我有

    self.viewModelHelper.apiPost('api/account/login',unappedmodel,
    功能(结果){
    }
    
    我已经创建了名为
    AccountApiController

    公共类AccountApicController:ApicController
    {
    [HttpPost]
    [发布(“api/账户/登录”)]
    公共HttpResponseMessage登录(HttpRequestMessage请求,[FromBody]AccountLoginModel accountModel)
    {
    返回null;
    }
    }
    
    然而,当我在ChromeDeveloperTools中检查单击事件时,我得到了一个错误响应

    POSThttp://localhost:64436/api/account/login 404(未找到)

    这是我的网页

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

    屏幕截图 试试:

      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而不是account,因此webapi找不到任何名为account的控制器。

    webapi在MVC体系结构中有严格的调用

    如果您调用POST,这意味着API将真正创建一个新实体,而不会发出其他要返回的请求

    也就是说,WebAPI不是您认为可能是的自定义API函数调用

    它不同于在MVC应用程序中创建单个API和web API

    这是一些注释

    • 获取:检索实体
    • PUT:更新实体
    • POST:创建新实体
    • 删除:删除现有实体
    假设你有一个帐户模型的API。我会说模型是在创建Web API时产生的。你需要一个模型。除非你在MVC之外创建你的自定义API

    现在您已经完成了。api/account/test 它将使用[GET]函数

    将执行帐户控制器中具有[GET]数据注释的任何函数。并返回一些信息

    不可以。不要使用Login作为方法的名称,只使用GET,因为您不能真正告诉Web API要使用哪个函数。它将使用带有GET数据注释的函数。因此输入
    api/account/login我不确定,但您的webapi控制器中的参数看起来有误


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

    您已经调用了控制器
    AccountApicController
    ,因此
    api/account/login
    应该是
    accountapi/login

    public class AccountApiController : ApiController
    {
    
        [HttpPost]
        [POST("api/accountapi/login")]
        public HttpResponseMessage Login(HttpRequestMessage request, [FromBody]AccountLoginModel accountModel)
        {
            return null;
        }
    }
    
    [HttpGet]
    
    public IEnumerable<string> Get()
    {
        return "No Value";
    }
    
    [HttpGet("{id}")]
    
    public IEnumerable<string> Get(int id)
    {
        return "There is a value";
    }