2

我在进行 Ajax 调用时得到“404 Not Found”,也许我不明白路由是如何工作的......

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
        }
4

2 回答 2

0

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

这是我为测试而制作的 Web API 中的一些非常通用的示例。我没有 JavaScript 可发布到此 API,因为我是从 .NET WPF 应用程序发布的。你会发布到“/Important”而不是“/Important/Post”希望这会让你走上正确的轨道......

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; }
    }
}
于 2013-03-03T18:37:48.557 回答
0

你可以试试:

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
        }
    });
}
于 2013-03-03T18:48:17.927 回答