Web.config bağlantı dizesinde kaçış teklifi


89

Web yapılandırmamda bir bağlantı dizem var:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass"word" providerName="System.Data.SqlClient" />

Gördüğünüz gibi şifrenizde bir tırnak işareti (") var (başka bir departmandan verilmiştir. Bu db kullanıcı şifresini değiştiremiyorum).

Bu bağlantı dizesindeki alıntıdan nasıl kaçmalıyım?

Btw: Zaten denedim & quot; dizede. Bu işe yaramadı - ado.net bir ArgumenException aldı ve ardından: "Başlatma dizesinin formatı, dizin 57'den başlayan spesifikasyona uymuyor." 57, & quot; bağlantı dizemde. Ayrıca şifre kısmını 'içine almayı denedim - işe yaramadı.

Ayrıca "" ve \ "denendi - web.config daha sonra ayrıştırılamaz.

Çözüm için teşekkürler:

Çift alıntı kaçışını ve şifreyi tek tırnak içine koymayı birleştirmem gerekiyordu:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'" providerName="System.Data.SqlClient" />

Yanıtlar:


110

Kaçmak için &quot;yerine kullanın ".

web.config bir XML dosyasıdır, bu nedenle XML kaçışını kullanmalısınız.

connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

Bu forum başlığına bakın .

Güncelleme :

&quot;çalışmalı, ancak çalışmadığı için, .NET için diğer dize kaçış dizilerinden bazılarını denediniz mi? \"ve ""?

Güncelleme 2:

ConnectionString için tek tırnak deneyin:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass"word'

Veya:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word'

Güncelleme 3:

Gönderen MSDN (SqlConnection.ConnectionString Mülkiyet):

Noktalı virgül, tek tırnak karakteri veya çift tırnak karakteri içeren değerleri dahil etmek için, değer çift tırnak işareti içine alınmalıdır. Değer hem noktalı virgül hem de çift tırnak işareti içeriyorsa, değer tek tırnak işareti içine alınabilir.

Yani:

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

Sorun web.config ile değil, bağlantı dizesinin biçimiyle ilgilidir. Bir bağlantı dizesinde, "(anahtar / değer çiftinin) bir değerine sahipseniz, değeri içine almanız gerekir '. Yani, Password=somepass"wordişe Password='somepass"word'yaramazken işe yarıyor .


Bu çalışmıyor. Bu, düz xml'de olsaydı, ancak bir öznitelik değeri dahilinde değilse, açıkça işe yarardı.
Sebastian PR Gingter

@Sebastian PR Gingter - bunun işe yaramaması garip. Başka kaçış dizilerini denediniz mi?
Oded

Evet. Dize içinde "" ve \ "kullanılırken tüm Web.config çözümlenemez. Bu kadar kolay olsaydı, burada
sormazdım

1
@Sebastian PR Gingter - buradaki insanlar neyi denediğinizi ve bildiklerinizi tahmin edemezler. Sorunuza bu tür ayrıntıları eklemeniz gerekir (şu anda olduğu gibi).
Oded

Web.config'iniz hangi kodlamayı kullanıyor?
Matthew Abbott

63
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

Web.config XML olduğundan, beş özel karakterden kaçınmanız gerekir:

&amp;-> ve & işareti, U + 0026
&lt; -> < sol açılı ayraç, küçüktür işareti, U + 003C
&gt; -> > sağ açılı ayraç, büyüktür işareti, U + 003E
&quot; -> " tırnak işareti, U + 0022
&apos; -> ' kesme işareti, U + 0027

+ sorun değil sanırım.


Duc Filan ekliyor: Parolanızı tek tırnak içine almalısınız ':

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

Web.config dosyasında saklanan bir parolada benim için ve işaretiydi. Açıkçası, aynı zamanda izini sürmek oldukça açık değil. Web.config dosyasında durum böyle olduğunda bir Azure Web Sitesinin size verdiği hata - "Bir dahili sunucu hatası oluştuğu için sayfa görüntülenemiyor." Hata günlüklerine hiçbir şey yazmıyor gibi görünüyor. Soru için OP'ye ve bu hatırlatıcı için sana teşekkürler.
Timothy Lee Russell

Köşeli parantez ne olacak? ([])
Dzianis Yafimau

Ve ;karakter?
Kiquenet

2

eğer &quot;o zaman çalışmıyor denemek &#34;yerine.


ve karakter için &? & amp; ?
Kiquenet

1

Odeds cevabı neredeyse tamamlandı. Eklenecek bir şey var.

  1. Emanuele Greco'nun dediği gibi xml özel karakterlerinden kaçın.
  2. Şifreyi Oded'in dediği gibi tek tırnak içine koyun
  3. (bu yenidir) Tek tiklerden başka bir tek tik ile kaçın ( ref )

bu şifreye sahip olmak = "'; bu geçerli bir bağlantı dizesi olmalıdır:

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'

Sanırım password='''';geçerli demek istiyorsun . Ama benim için işe yarayan tek şey senin önerin. Bu aslında başka kaçış planlarında da kullanılıyor.
Bluebaron

0

&quot;Çalışması gereken bu kullanın .


Hayır. çalışmıyor. Bunu sormadan önce zaten denedim ...
sormazdı
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.