2013-11-04 44 views
3

我在一個類庫項目下面的代碼(該網址已被簡化,但它仍然表明了同樣的行爲):的System.Uri類:在Azure的不同逃逸行爲對.Net框架

Uri oUri = new Uri("https://xzyserver.com/MyFolder%2FMyPage?querystring"); 

我發現System.Uri類在Azure工作者角色中以不同的方式在本地以不同的方式回顧我的Url。

如果在一個桌面應用程序oUri.AbsoluteUri返回不同的值,在Azure中,跑步(無論是在計算仿真和生產輔助角色)類庫運行:

本地= MyFolder文件%2FMyPage查詢字符串

InAzure = MyFolder中/我的頁面?查詢字符串

(我不得不刪除網址開始在上面的兩行,因爲堆棧溢出告訴我有在我的崗位太多的鏈接)

本地行爲就是我所需要的(作爲第三方認證過程的一部分,安全令牌是根據請求Uri和請求主體的其他部分來計算的,因此這種無用的操作會打破該過程)。 Uri與System.Net.Http名稱空間中的類一起使用。

我試圖Uri構造函數(蘇里,bDontEscape)的過時形式,但這並沒有任何區別。

此外,行爲似乎矛盾 - 我也試過如下:

Uri oUri = new Uri("https://xzyserver.com/MyFolder%252FMyPage?querystring"); 

然而,僅轉義似乎適用於%2F爲「/」時,25%沒有反轉義回到「 %「,而不是oUri.AbsoluteUri返回完整的原始網址,沒有無法解析。

這是一個已知的/記錄的問題?任何簡單的解決辦法,我可能錯過了?

PS。 System.Net.Http命名空間中的類在其構造函數的許多構造函數中使用Uri對象或Uri字符串,但同樣的問題適用於兩者。我期望這些類僅僅是爲基於字符串的重載創建一個Uri。

+0

無效表單出現在哪裏?訪問uri的屬性時會看到這個嗎?或者這是在網絡服務器的請求中看到的?要麼...?但是,是的,'Uri'和IIS都有一些奇怪的故事可以說明它的逃跑 - 它已經咬了我幾次(和:它最近也改變了)(http://meta.stackexchange.com/questions/ 203116 /錯誤返回-URP登錄後/ 203126#203126)) –

+0

訪問幾乎所有的Uri對象的屬性時看到錯誤的形式(例如AbsolutePath,PathAndQuery,AbsolutePath等),它也是由System.Net.Http.HttpClient發送的任何System.Net.Http.HttpRequestMessages中發送的Uri的形式,通過在Fiddler中查看傳出請求進行確認。最初我懷疑HttpClient,etc類,但是上面的例子表明這是Uri類(它被HttpClient使用)的一個更基本的問題。 – cbailiss

+0

請告訴我們我們正在討論哪些.NET版本以及Azure SDK的哪些版本。 –

回答

1

經過進一步的研究,我發現這個行爲是由設計,但可以粗略地從app.config文件從.NET 4.0開始控制。

http://msdn.microsoft.com/en-us/library/ee656542(v=vs.110).aspx

文檔建議的默認行爲應爲Azure上。我無法找到爲本地系統配置的覆蓋(可能客戶端桌面安裝的默認值是啓用覆蓋)?無論如何,至少我現在理解這種行爲。

將覆蓋添加到Azure輔助角色app.config文件中已解決該問題。