apicontroller不从阿贾克斯

apicontroller不从阿贾克斯

问题描述:

让我得到“404未找到”做一个Ajax调用, 也许,我不知道如何路由作品...apicontroller不从阿贾克斯

function ApproveAlert(ID) { 
    $.ajaxPost('/api/DeviceApi/ApproveAlertNew', { 'ID': ID }, function (data) { 
     ... get error "404 Not Found" 
    }, null); 
} 
我mvc4 C#应用程序

我有狂胜配置:

RouteTable.Routes.MapHttpRoute(
       name: "defaultapiaction", 
       routeTemplate: "api/{controller}/{action}" 
      ); 
      RouteTable.Routes.MapHttpRoute(
       name: "defaultapiid", 
       routeTemplate: "api/{controller}/{action}/{id}" 
      ); 

和apicontroller:

public class DeviceApiController : ApiController 
    { 
     // 
     // GET: /DeviceApi/ 
     [HttpPost] 
     public bool ApproveAlertNew(int ID) 
     { 
      ..do 
     } 
+0

尝试使用'$ .post('/ api/DeviceApi/ApproveAlertNew?ID ='+ ID,{},函数(数据)' – nemesv 2013-03-03 16:13:18

+0

我想要发布数据 – 2013-03-03 17:11:07

的Web API控制器不相同SENS使用 “操作” e MVC控制器。 Web API控制器也不会真正使用[HttpPost],[HttpGet]属性。他们根据ApiControllers内部方法的名称分派请求。我建议阅读关于Web API与MVC差异的更多内容,因为它们很相似,但有时很难启动和运行......

下面是我为测试制作的Web API的一些非常通用的示例。我没有JavaScript发布到这个API,因为我是从.NET WPF应用发布的。你会张贴到 “/重要” NOT “/重要/邮报” 希望这将让你在正确的轨道上......

WebAPIConfig.cs(路线):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web.Http; 

namespace ArrayTest.WebAPI 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 
    } 
} 

API控制器:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using ArrayTest.Models; 
using System.Threading; 

namespace ArrayTest.WebAPI.Controllers 
{ 
    public class ImportantController : ApiController 
    { 
     // POST api/important 
     public HttpResponseMessage Post(ImportantList values) 
     { 
      //manipulate values received from client 
      for (int i = 0; i < values.ImportantIDs.Count; i++) 
      { 
       values.ImportantIDs[i] = values.ImportantIDs[i] * 2; 
      } 

      //perhaps save to database, send emails, etc... here. 

      Thread.Sleep(5000); //simulate important work 

      //in my case I am changing values and sending the values back here. 
      return Request.CreateResponse(HttpStatusCode.Created, values); 
     } 

    } 
} 

型号:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ArrayTest.Models 
{ 
    public class ImportantList 
    { 
     public List<int> ImportantIDs { get; set; } 
    } 
} 

你可以尝试用:

function ApproveAlert(ID) { 
    $.ajax({ 
     type: 'POST', 
     url: "/api/DeviceApi/ApproveAlertNew", 
     data: { 
      ID: ID 
     }, 
     success: function (data) { 
      //Handle your success 
     }, 
     error: function (jqXHR, textStatus, errorThrown) { 
      //Handle error 
     } 
    }); 
}