Tôi có dịch vụ REST WCF được lưu trữ trong dịch vụ Windows và tôi muốn gửi tiêu đề HTTP Access-Control-Allow-Origin HTTP (được định nghĩa là một phần của CORS) với mọi phản hồi.Hỗ trợ CORS trong WCF REST Services
giải pháp cố gắng của tôi là có một cái gì đó như sau trong vòng một thực hiện IDispatchMessageInspector:
public void BeforeSendReply(ref Message reply, object correlationState)
{
var httpResponse = reply.Properties["httpResponse"] as HttpResponseMessageProperty;
if (httpResponse != null)
{
// test of CORS
httpResponse.Headers["Access-Control-Allow-Origin"] = "*";
}
}
Thông thường điều này sẽ làm việc, nhưng tiếc là dịch vụ của tôi cũng sử dụng HTTP basic authorization, có nghĩa là khi có một request đến mà không có sự ủy quyền tiêu đề, WCF tự động gửi một phản hồi 401 yêu cầu thông tin đăng nhập. Thật không may WCF không gọi IDispatchMessageInspector của tôi trong lần trao đổi ban đầu này, vì vậy đầu đề Access-Control-Allow-Origin không được thêm vào trao đổi ban đầu.
Sự cố xảy ra khi tôi cố gắng gọi dịch vụ từ trình duyệt. CORS chỉ định rằng yêu cầu có nguồn gốc chéo chỉ được phép nếu miền gốc khớp với tên miền được liệt kê trong tiêu đề phản hồi Access-Control-Allow-Origin (* khớp với tất cả tên miền). Thật không may khi trình duyệt thấy phản hồi 401 ban đầu mà không có tiêu đề Access-Control-Allow-Origin, trình duyệt sẽ ngăn truy cập (theo số same origin policy).
Có cách nào thêm tiêu đề vào phản hồi 401 ban đầu được gửi tự động bởi WCF không?
Bạn đã bao giờ nhận được bất cứ nơi nào với điều này? –