2013-05-21 12 views
34

Geçerli istek medya türü biçimlendiricisine göre döndürülecek bir Error nesnesi içeren bir HttpResponseMessage oluşturan bir yöntem var.Genel olarak geçerli HttpRequestMessage nesnesine nasıl erişilir?

Şu anda, XmlMediaTypeFormatter'ı kodladım ancak şu anki isteği MediaTypeFormatter'ı çalışma zamanında bulmak istiyorum ancak aşağıdaki kodum ayrı bir sınıf kitaplığında bulunduğundan beri geçerli istek nesnesine erişemiyorum.

private HttpResponseMessage Create(HttpStatusCode statusCode, string errorCode, string errorMessage) 
{ 
    var result = new HttpResponseMessage(statusCode) 
     { 
      Content = new ObjectContent<Error>(new Error() 
      { 
       Code = errorCode, 
       Message = errorMessage 
      }, new XmlMediaTypeFormatter()) 
     }; 
    return result; 
} 

Geçerli HttpRequestMessage nesnesine global olarak nasıl erişilir? HttpContext.Current.Request

Bir şey imkansızsa, yukarıdaki yöntemi uygulamak için geçerli biçimlendirme için hangi biçimlendiriciyi kullanması gerektiğini biliyor mu?

+1

Neden "XmlMediaTypeFormatter" öğenize bir "HttpRequestMessage" iletmiyorsunuz? eğer formerin başka bir kütüphanede olduğunu söylerseniz, bunu uygulamanıza güçlü bir şekilde bağlamak daha iyi olmaz. – polkduran

+0

teşekkürler, herhangi bir özel biçimlendirici kullanmıyorum. Denetleyici İsteği özelliğini geçmekten kaçınabileceğimi umuyordum. –

+0

Daha iyi bir çözüm olmadığı için nihayet Talebimi geçtim. –

cevap

2

Neden Web API ekibi kendi CreateResponse yöntemi ile yapmışlardır? Denetleyicinin bir uzatma yöntemidir. Bu şekilde kod ayrı bir sınıf kütüphanesinde olabilir, ancak yönteminiz kontrolör örneğine ve dolayısıyla tüm Yapılandırma bilgilerine erişebilir.

Ve biraz farklı bir notta, kendi standartlarınızı belirlemekten ziyade, hata yanıtları için bazı standartlaştırma çabalarına bakmanızı öneririm.

ör .: imkansız Sadece son zamanlarda öğrendim değil olarak

+2

hmm, Denetleyici örneğini daha sonra çalışma zamanında ayrı bir sınıftan nasıl edinebilirim? önerinizin kullanılabileceğini düşünmeyin. –

+0

Merhaba, bu yazı için teşekkürler. Bu mesafeden çekiş kazanıp kazanmadığına ve/veya bir fikir olarak mı (veya başka bir şeye göre) eklenmiş olup olmadığına dair bir güncelleme sunabilir misiniz? –

60

.

Bu WebAPI v2 gibidir .. ben önceki sürümleri emin olamaz: (böyle bir sayfa varsa) = [

HttpRequestMessage httpRequestMessage = HttpContext.Current.Items["MS_HttpRequestMessage"] as HttpRequestMessage 

Düzenleme Aslında şimdiki HttpContext Öğeler mülkiyet içine eklenir.

+4

WebAPI v1'de yok. – SeriousM

+2

Kullanmak için uygun mu? Bana komik geliyor ama nedenini açıklayamıyorum ... – Magrangs

+0

@Magrangs WebAPI 2 kullanıyorsanız, o zaman kullanmanız uygun. ASP pipleline, mesaj nesnesini geçerli httpcontext'de depolar. Bir oturuma kendiniz hata ayıklayabilir ve "HttpContext.Current.Items" deki çeşitli tuşları inceleyebilirsiniz. Bunun WebAPI – dariusc

İlgili konular