Tôi có trang webapi MVC sử dụng xác thực OAuth / mã thông báo để xác thực các yêu cầu. Tất cả các bộ điều khiển liên quan đều có thuộc tính phù hợp và xác thực đang hoạt động tốt.
Vấn đề là không phải tất cả yêu cầu đều có thể được ủy quyền trong phạm vi của một thuộc tính - một số kiểm tra ủy quyền phải được thực hiện trong mã được gọi bởi các phương thức bộ điều khiển - cách chính xác để trả về phản hồi 401 trái phép trong trường hợp này là gì?
Tôi đã thử throw new HttpException(401, "Unauthorized access");
, nhưng khi tôi làm điều này, mã trạng thái phản hồi là 500 và tôi cũng nhận được dấu vết ngăn xếp. Ngay cả trong trình ghi nhật ký của chúng tôi, chúng tôi có thể thấy rằng phản hồi là 500, không phải 401.
HttpResponseException
so với khi nào trả lại một câu trả lờiUnauthorized()
. Việc sử dụng ngoại lệ cho một lỗi 'mong đợi' là một chút sai lầm, vì vậy nếu có trường hợp bạn cho rằng cuộc gọi mắc lỗi này, thì việc quay lạiUnauthorized()
có lẽ là cuộc gọi phù hợp. Tiết kiệmHttpResponseException
cho những gì thực sự bất ngờ.