Khi bạn thao tác dữ liệu trong một hành động, bạn thường nhận được ID làm thông số, nhưng bạn cần thực hiện một số xử lý lỗi cho id đó. Một trong những lỗi xử lý bạn phải làm cho mọi hành động là đảm bảo ID cao hơn 0 (không phải là số âm). Vì vậy, thay vì xử lý điều này trong hành động, tôi muốn thêm một ràng buộc tuyến đường vì vậy chỉ không định tuyến đến hành động nếu một id âm của nó.Lỗi ràng buộc tuyến đường trên POST
Dưới đây là mã của tôi:
//route definition
routes.MapRoute(
"default route" ,
"{controller}/{action}/{id}" ,
new { id = UrlParameter.Optional },
new { id = @"^\d+$" }
);
//action definition (note I also tried with only [HttpPost] and with nothing same result
[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)]
public ActionResult Edit(int id)
Tất cả đều hoạt động tốt khi bạn làm một GET trên hành động, nhưng khi tôi POST tôi nhận được lỗi sau khi nó chỉ cần đi đến trang 404
HTTP verb POST used to access path '/object/edit/-2' is not allowed.
[HttpException (0x80004005): The HTTP verb POST used to access path '/object/edit/-2' is not allowed.]
System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) +740
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +632
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +194
Bất kỳ ý tưởng nào? Có lẽ một giải pháp tốt hơn?
EDIT: Chỉ cần nhận thấy một cái gì đó thú vị, ban đầu tôi nghĩ rằng các thông báo lỗi là 500, nhưng nó là một 405 mà là "không tìm thấy phương pháp"
bạn có đang viết lại URL nào không? Các đường dẫn trong ngoại lệ của bạn không khớp. – Robaticus
không xin lỗi, tôi đã đề cập trong câu trả lời đầu tiên, tôi có nghĩa là để thay thế các hành động và điều khiển trong cả hai nhưng bỏ lỡ sự xuất hiện thứ hai. Cả hai đều phù hợp. –
Tôi thực sự không hiểu tại sao nó sẽ được tốt trên GET và ném một lỗi trên POST –