2010-11-22 15 views
7

Tarayıcılar, URL'lerin uzunluğuyla ilgili sınırlamalara sahiptir. IE, URL uzunluğunun 2K karakterini geçmemesi sınırlamasına sahiptir.OData Url Uzunluk Sınırlamalar

$ filter equals sorgusu oluşturduğumda, birden çok giriş değeriyle karşılaştırabilirdim. Böyle bir durumda, Url'nin uzunluğu 2K'yı geçecektir.

OData, Url'nin uzunluğuna herhangi bir sınır koyar mı?

Teşekkür

cevap

6

OData kendisi Url uzunluğunu sınırlamak değil, ama çoğu istemci ve sunucuların belirttiğin gibi yap. Bu yüzden genellikle URL'leri çok uzun üretmemek iyi bir uygulamadır.

iki olası çözümleri vardır Operatörü (veya benzer bir şey içeriyor uygulanması) bakın sorun:

1) sizin için böyle bir sorgu işlemek için hizmet işlemi kullanın. Bir kod olarak kodlanmış çoklu giriş değerlerini veya böyle bir şeyi geçirebilirsiniz, ya da belki de servis işlemi bu açıkları zaten biliyordur.

2) Uzun $ filtresini kullanın, ancak isteği $ batch isteğinde gönderin. Avantajı, Url'deki sınırın çok daha büyük olması ve buna isabet etmenin çok muhtemel olmamasıdır. Dezavantajı, bir GET isteğini yerine getirmeye çalıştığınız halde, $ batch nedeniyle web üzerinden POST isteği olarak gidip önbelleğe alınmayacak olmasıdır.

0

$batch'un nasıl kullanıldığını bulamadım. Bu yüzden uzun bir istek göndermek için $filter'u kullandım. Onun oldukça kolay: "ID_CLIENT = 1 or ID_CLIENT = 2"

NB: Dont büyük VE kullanmak böyle bir dize döndürür MyFilter()

DataServiceQuery<CLIENT> ordersQuery = DataServiceQuery<CLIENT>)this.context.CLIENTS.AddQueryOption("$filter", MyFilter()); 

. Bu ve hataya yol açar. kullanmak and değil AND

+4

OP'nin sorusunu nasıl yanıtlayacağımı anlamıyorum. Bu, URL uzunluğunun çok uzun olmasıyla nasıl bağlantılı? – Jerther

1

Ben OP'ın sorusuna @Vitek's answer ertelemek:

OData itself doesn't limit the length of the Url

Ama çünkü burada gelmesi diğerleri sınırlamalar IIS eğer: The request filtering module is configured to deny a request where the query string is too long., onlar benim cevap yararlanabilir. Bu hatanın talimatları izleyin:

Verify the configuration/system.webServer/security/requestFiltering/requestLimits[email protected] setting in the applicationhost.config or web.config file.

talimatları uygulayın: Bu teknik here ve here açıklanmıştır The length of the query string for this request exceeds the configured maxQueryStringLength value.

ve benzediğini: Ayrıca bu hatayı alabilirsiniz

<configuration> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxQueryString="50000"> 
     </requestLimits> 
     ... 

Bu:

<configuration> 
    <system.web> 
     <httpRuntime maxQueryStringLength = "50000" ... />