Tôi muốn sử dụng thành phần dựa trên ajax (KendoUI) để đọc/sửa đổi các thực thể trên điểm cuối OData do WCF DataServices triển khai.WCF DataService không hỗ trợ các yêu cầu OPTIONS preflight?
Việc thực hiện dịch vụ là khá dễ dàng ở nơi đầu tiên:
public class MyFooService : DataService<FooContext>
{
public static void SetEntitySetAccessRules(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Foos", EntitySetRights.AllWrite);
}
}
Bây giờ tôi đã mong đợi để có thể sửa đổi các đơn vị sử dụng PUT. KendoUI cung cấp một giao diện cấu hình đẹp và dễ dàng và thực hiện tốt công việc tạo yêu cầu PUT.
Chúng tôi đang thực hiện yêu cầu tên miền chéo và sử dụng CORS. Vì vậy, Firefox, ví dụ, gửi một yêu cầu OPTIONS preflight đến dịch vụ OData trước khi gửi PUT.
Rất tiếc, điểm cuối dịch vụ dường như không hỗ trợ OPTIONS out-of-the-box: Phản hồi cho yêu cầu OPTIONS là "501 Không được triển khai" với nội dung trống. Ít nhất chúng ta quản lý mà các phản ứng có các tiêu đề CORS như sau:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<!-- Enable cross-origin resource sharing -->
<!-- http://enable-cors.org/#how-asp.net -->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
Googling cho điều này đã hóa ra một chút khó khăn vì "lựa chọn" là một thuật ngữ rất phổ biến ...
tôi thấy this article nhưng có vẻ như rất, rất phức tạp. Tôi có nghĩa là, OData là tất cả về REST, tôi không thể tưởng tượng rằng WCF Dịch vụ dữ liệu không cung cấp một cách đơn giản để cho phép yêu cầu preflight, hoặc?
Tôi mang nó rằng WCF OData Dịch vụ hoạt động trên WCF và đi qua cùng một đường ống WCF. Nếu vậy hãy kiểm tra liên kết trong [answer] này (http://stackoverflow.com/questions/11597314/origin-http-localhost-is-not-allowed-by-access-control-allow-origin/11606701#11606701). IMHO là cách dễ nhất để thực hiện CORS trong WCF. – Obaid
Tôi biết điều này không chính xác những gì bạn muốn nhưng tôi nghĩ cách dễ nhất để làm việc với các yêu cầu miền chéo là chỉ sử dụng proxy ngược của IIS. Bằng cách này, bạn chỉ đi ngược lại miền của riêng bạn và IIS là người gửi yêu cầu của bạn đến miền khác. Sau đó, mã của bạn không cần biết bất kỳ điều gì về các miền khác. – lontivero
Ngẫu nhiên tình cờ gặp phải điều này; chỉ nghĩ rằng tôi muốn liên kết với [this] (https://stackoverflow.com/questions/19808069/wcf-dataservice-odata-and-cors) và [rằng] (https://data.uservoice.com/forums/ 72027-wcf-data-services-feature-suggestions/đề xuất/4450449-cors-hỗ trợ) để thảo luận thêm. – tne