Uri
cư xử khác nhau trong .Net4.0 vs .Net4.5Làm thế nào để workaround khác biệt với Uri và URL mã hóa trong .Net4.0 vs .Net4.5 sử dụng HttpClient
var u = new Uri("http://localhost:5984/mycouchtests_pri/test%2F1");
Console.WriteLine(u.OriginalString);
Console.WriteLine(u.AbsoluteUri);
Kết quả NET4.0
http://localhost:5984/mycouchtests_pri/test%2F1
http://localhost:5984/mycouchtests_pri/test/1
Kết quả NET4.5
http://localhost:5984/mycouchtests_pri/test%2F1
http://localhost:5984/mycouchtests_pri/test%2F1
Vì vậy, khi sử dụng các yêu cầu HttpClient
distributed by Microsoft via NuGet như lỗi trên với .Net4.0, kể từ khi HttpRequestMessage
đang sử dụng Uri
.
Bất kỳ ý tưởng nào để giải quyết sự cố?
EDIT Có một NON HIỆN HÀNH workaround bằng cách thêm cấu hình cho <uri>
trong ví dụ App.config
hoặc Machine.config
(http://msdn.microsoft.com/en-us/library/ee656539(v=vs.110).aspx).
<configuration>
<uri>
<schemeSettings>
<add name="http" genericUriParserOptions="DontUnescapePathDotsAndSlashes"/>
</schemeSettings>
</uri>
</configuration>
Nhưng vì đây là thư viện công cụ, đây thực sự không phải là tùy chọn. Nếu số HttpClient
cho .Net4.0 được coi là ngang bằng với giá trị trong .Net4.5, chúng sẽ có cùng hành vi.
Bạn có thể thấy rằng 'u.OriginalString' cho cùng một giá trị, bất kể frameword .net, Vì vậy, bạn có thể sử dụng chỉ, trừ khi bạn thực sự cần sự khác, Sửa lỗi nếu tôi sai! –
Tôi không kiểm soát được. URI được tiêu thụ ở đâu đó trong vùng đất tối của HttpClient và trình xử lý tin nhắn liên quan. – Daniel
Tôi nghĩ, bạn quan tâm đến việc sử dụng 'OriginalString' và' AbsoluteUri'! , Nhưng tôi vẫn chưa rõ, vì bạn cần giải pháp! –