gpt4 book ai didi

jquery - DELETE 命令未到达 WebAPI Controller

转载 作者:行者123 更新时间:2023-12-03 21:46:07 25 4
gpt4 key购买 nike

通过 ASP.NET Web API 提交请求时,我很难触发 Controller 上的 DELETE 方法。它返回 404 但我不明白为什么。 GET 和 POST 请求按预期工作,在提供 id 时返回项目列表以及单个项目,但是当我使用 DELETE 请求调用 API 时,我收到 404 错误。

场景:

1。 ASP.NET Web 窗体应用程序...

虽然我已经安装了 MVC4 包以便利用 Web API 功能,但它不是 MVC 应用程序。

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

            RouteTable.Routes.MapHttpRoute(

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

3。 Controller 定义

    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,因此我不会将这些响应与真正的问题混淆。显然,在实际实现中,没有客户会返回 404 错误。

4。通过 JQuery Ajax 调用删除项目。

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

所以我期望单一路线图应该适应所有场景......

  1. GET api/customer -- 返回所有客户
  2. GET api/customer/5 -- 返回 ID = 5 的客户
  3. POST api/customer -- 创建新的客户记录
  4. DELETE api/customer/5 -- 删除 ID = 5 的客户

1,2 & 3 工作没有问题,只是 DELET 不起作用。我尝试了很多迭代和不同的调整,但都无济于事。但我仍然觉得我忽略了一些小事。我觉得问题一定出在路由映射上,但我不明白为什么这条路由不能成功处理 DELETE 请求。

任何帮助将不胜感激。

谢谢!

加里

最佳答案

你的 web.config 中定义了这个吗?

   <system.webServer>
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>

关于jquery - DELETE 命令未到达 WebAPI Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9692687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com