jquery – DELETE命令未达到WebAPI控制器

前端之家收集整理的这篇文章主要介绍了jquery – DELETE命令未达到WebAPI控制器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我通过ASP.NET Web API提交请求时,我的控制器上的DELETE方法难以触发。它返回一个404,但我不知道为什么。 GET& POST请求按预期工作,在提供id时返回项目列表以及单个项目,但是当我使用DELETE请求调用API时,会收到404错误

场景:

ASP.NET Web窗体应用程序…

不是MVC应用程序,尽管我已经安装了MVC4软件包,以利用Web API功能

2. global.asax中的路由表定义

RouteTable.Routes.MapHttpRoute(

                    "Default","api/{controller}/{id}",new { id = RouteParameter.Optional } 
            );

3.控制器定义

public HttpResponseMessage<Customer> Post(Customer customer)
    {
        CustomerDb.Customers.AddObject(customer);
        CustomerDb.SaveChanges();
        var response = new HttpResponseMessage<Customer>(customer,HttpStatusCode.Created);
        response.Headers.Location = new Uri(Request.RequestUri,"/api/Customer/"+customer.id.ToString());
        return response;
    }

    public CustomerDTO Get(int id)
    {
        CustomerDTO custDTO = null;
        Customer cust = CustomerDb.Customers.Where(c => c.id == id).SingleOrDefault();
        if (cust == null)
            throw new HttpResponseException(HttpStatusCode.BadRequest);
        else
            custDTO = new CustomerDTO(cust);
        return custDTO;
    }

    public IEnumerable<CustomerDTO> Get()
    {
        IQueryable<Customer> custs = CustomerDb.Customers.AsQueryable();

        List<CustomerDTO> dto = new List<CustomerDTO>();
        foreach (Customer cust in custs)
        {
            dto.Add(new CustomerDTO(cust));
        }

        return dto;
    }

    public Customer Delete(int id)
    {
        Customer cust = CustomerDb.Customers.Where(c => c.id == id).SingleOrDefault();
        if (cust == null)
            throw new HttpResponseException(HttpStatusCode.BadRequest);

        CustomerDb.Customers.DeleteObject(cust);
        CustomerDb.SaveChanges();
        return (cust);
    }

我有一些方法抛出一个BadRequest错误,而不是404,当一个客户不能被发现,所以我没有得到这些回应与REAL问题混淆。显然,在一个真正的实现中,没有客户会返回404错误

Ajax通过JQuery调用删除项目。

function deleteCustomer(id) {

        var apiUrl = "/api/customer/{0}";
        apiUrl = apiUrl.replace("{0}",id);

        $.ajax({
            url: apiUrl,type: 'DELETE',cache: false,statusCode: {
                200: function (data) {
                },// Successful DELETE
                404: function (data) {
                    alert(apiUrl + " ... Not Found");
                },// 404 Not Found
                400: function (data) {
                    alert("Bad Request O");
                } // 400 Bad Request
            } // statusCode
        }); // ajax call
    };

所以我期待singel路线图应该适应所有的情况…

GET api / customer – 返回所有客户
> GET api / customer / 5 – 返回ID = 5的客户
> POST api / customer – 创建一个新的客户记录
> DELETE api / customer / 5 – 删除ID = 5的客户

1,2& 3工作没有问题,只是DELET不起作用。我已经尝试了很多迭代和不同的调整,没有用。我仍然觉得我忽略了一些小事情。我觉得这个问题必须围绕着Route映射,但是我不明白为什么这个路由不能成功地处理DELETE请求。

任何帮助将不胜感激。

谢谢!

加里

解决方法

你在web.config中有这个定义吗?
<system.webServer>
          <modules runAllManagedModulesForAllRequests="true">
          </modules>
    </system.webServer>

猜你在找的jQuery相关文章