4

Tôi đang làm việc với API Web cho một trong những dự án mới của mình thì đột nhiên tôi nhận được thông báo lỗi này: "máy chủ phản hồi với trạng thái 405 (phương thức không được phép)" khi tôi cố xóa bản ghi thông qua API. Tôi bắt đầu gãi đầu, và cuối cùng, tôi đã đưa ra một giải pháp. Ở đây, tôi sẽ chia sẻ với bạn giải pháp đó. Tôi hy vọng bạn sẽ thích điều này.

Sau đây là các giải pháp khác nhau mà bạn có thể thử nếu gặp lỗi này.

Giải pháp 1: Thay đổi tệp Web.Config

Đây là điều đầu tiên bạn phải thử. Vui lòng thêm các thẻ dưới đây trong tệp Web.Config.

<validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>

Nếu bạn vẫn nhận được lỗi, hãy thử thêm một thẻ trong trình xử lý như sau.


<handlers>
      <remove name="WebDAV" />
        .....
</handlers>

Nếu cách trên không hiệu quả với bạn, bạn có thể đi đến giải pháp tiếp theo.

Giải pháp 2: Hoàn nguyên tên tham số

Như bạn đã biết, chúng tôi có một tệp có tên WebApiConfig.cs nơi chúng tôi đặt MapHttpRoute và các bộ lọc cấu hình khác.

Tập tin cấu hình WebApi

Theo mặc định, tham số ở đây là 'id' như sau.


config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

Bây giờ, nếu bạn thay đổi tham số của hàm trong mọi trường hợp, bạn cần hoàn nguyên lại thành 'id' hoặc bạn cần thực hiện thay đổi trong tệp WebApiConfig.cs.

Ví dụ, dưới đây là chức năng xóa của tôi.


 // DELETE: api/Subscriber/5
        public void Delete(int subId)
        {
            tbl_Subscribers dlt = myEntity.tbl_Subscribers.Find(subId);
            if (dlt != null)
            {
                try
                {
                    myEntity.tbl_Subscribers.Remove(dlt);
                    myEntity.SaveChanges();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

Như bạn có thể thấy, tôi đã thay đổi tham số của mình thành 'subId'. Vì điều này, tôi đã nhận được lỗi, máy chủ đã phản hồi với trạng thái 405 (phương thức không được phép) luôn luôn. Sau đó, tôi đã thay đổi chức năng của mình như sau.


// DELETE: api/Subscriber/5
        public void Delete(int id)
        {
            tbl_Subscribers dlt = myEntity.tbl_Subscribers.Find(id);
            if (dlt != null)
            {
                try
                {
                    myEntity.tbl_Subscribers.Remove(dlt);
                    myEntity.SaveChanges();
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }

Nó hoạt động tốt sau khi tôi đã thay đổi tên tham số. Tôi hy vọng bạn tìm thấy nó hữu ích. Đó là tất cả. Chúng ta làm được rồi. Chúc mừng mã hóa!

Phần kết luận

Tôi đã bỏ lỡ bất cứ điều gì mà bạn có thể nghĩ là cần thiết? Bạn đã thử API Web chưa? Bạn đã bao giờ muốn làm yêu cầu này? Bạn có thể tìm thấy bài viết này là hữu ích? Tôi hy vọng bạn thích bài viết này. Hãy chia sẻ với tôi những gợi ý và phản hồi có giá trị của bạn.

|