Dưới đây là cấu hình định tuyến trong WebApiConfig.cs:Làm thế nào để xác định phương pháp PUT trong định tuyến chỉ giới hạn các phương thức Đặt trong bộ điều khiển mà không có tham số?
config.Routes.MapHttpRoute(
name: "DefaultApiPut",
routeTemplate: "api/{controller}",
defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Put) }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get, HttpMethod.Post, HttpMethod.Delete) }
);
Đây là bộ điều khiển của tôi:
public class MyController : ApiController {
[HttpPut]
public void Put()
{
//blah
}
}
Bằng cách nào đó khi sents khách hàng yêu cầu PUT với URL /api/myController/12345
, nó vẫn maps cho Put
phương pháp trong MyController
, tôi đang mong đợi một lỗi như tài nguyên không tìm thấy.
Cách buộc phương thức Put
chỉ chấp nhận yêu cầu mà không có tham số?
Cảm ơn trước!
Mã này mẫu làm việc cho tôi ngoại trừ việc tôi đã phải ghi rõ những hạn chế như trong câu hỏi, ví dụ: hạn chế: mới {httpMethod = new HttpMethodConstraint (HttpMethod .Get)} –
Có hai lớp HttpMethodConstraint trong .net 4.5.1. Một trong System.Web.Routing và một trong System.Web.Http.Routing. Chúng yêu cầu các mẫu tham số khác nhau, một mẫu chấp nhận các chuỗi, cái kia sẽ tìm kiếm enum. Tôi chưa biết liệu họ có những hành vi khác ngoài điều đó không. – Rozwel
@Rozwel cảm ơn! Tôi đã đập đầu của tôi một chút nhận được không thể chuyển đổi thành chuỗi lỗi bởi vì tôi đã sử dụng system.web.routing không system.web.http.routing. – Matt