尝试进行AJAX POST调用时出错

时间:2015-07-08 12:15:25

标签: ajax asp.net-web-api asp.net-mvc-5

我创建了View in action页面:

       public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Title = "Home Page";

            return View();
        }
}

在视图的某个时刻,我使用AJAX对另一个控制器进行POST调用:

function Save() {
    if (sensorData) {
        $.ajax({
            url: '/../Sensor/SaveData',
            type: 'POST',
            contentType: 'application/json',
            dataType: 'json'
        });
    }
    else {
        alert("No Data.");
    }
}

这是API控制器的代码:

    public class SensorController : ApiController
    {
        public IHttpActionResult SaveData()
        {
            try
            {
                return Ok();
            }
            catch (Exception)
            {
                return BadRequest("Data not saved");
            }
        }
}

但是我收到了这个错误: " NetworkError:404 Not Found - http://localhost:7486/Sensor/SaveData"

知道我为什么会收到错误吗?以及如何解决问题。

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试使用MVC路由调用API控制器。 如果您检查WebApiConfig,您可能刚刚定义了DefaultApi路线:

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

如果是这种情况,请更改您的控制器操作以添加[HttpPost]属性

public class SensorController : ApiController
{
    [HttpPost]
    public IHttpActionResult SaveData()
    {
        try
        {
            return Ok();
        }
        catch (Exception)
        {
            return BadRequest("Data not saved");
        }
    }
}

然后进行Ajax调用:

function Save() {
    if (sensorData) {
        $.ajax({
            url: '/api/Sensor',
            type: 'POST',
            contentType: 'application/json',
            dataType: 'json'
        });
    }
    else {
        alert("No Data.");
    }
}

注意:此时您不会将任何数据发布到服务器。