Yalnızca Content-Type üstbilgisi "application/json" ile isteklere izin vermeye karar verdik. Yani, bir seçenek veya eksik Content-Type üstbilgisi ile bir istek aldığımızda, bir HttpError atarız. Bu ,, ilgili bilgiler içeren bir JSON ResponseStatus gövdesi içeren 400 yanıt döndürmelidir. Ancak, bir Content-Type metin/düz gönderilirse, bir HttpError atar, ancak yanıtlayanın Content-Type metin/düz ve içerik-uzunluktur: 0. ServiceStack'ın ResponseStatus'unun döndürülmesini bekledim. İstekte bir Accept uygulaması/json başlığı eklediğimde ResponseStatus düzgün şekilde iade edilir. İsteği Postman kullanarak gerçekleştirdim. Fiddler4 ekran görüntüsü: ServiceStack'ın her zaman JSON'u döndürdüğünden nasıl emin olunur?
Ben Postacı / başlığını Kabul ekler farkındayım. Bu yüzden sorum şu: Atılmış bir HttpError, ResponseStatus'u her zaman, istekte bulunan Accept üstbilgisi ne olursa olsun JSON olarak döndürmesini nasıl sağlayabilirim?
setconfig: istekte bir Accept başlık yok olduğunda
SetConfig(new HostConfig
{
EnableFeatures = Feature.All.Remove(Feature.Html | Feature.Csv | Feature.Jsv | Feature.Xml | Feature.Markdown | Feature.Razor | Feature.Soap | Feature.Soap11 | Feature.Soap12 | Feature.PredefinedRoutes),
DebugMode = false,
DefaultContentType = MimeTypes.Json
});
Anladığım kadarıyla
, DefaultContentType sadece kullanılır.PreRequestFilter:
PreRequestFilters.Add((request, response) =>
{
if (request.Verb.Equals("OPTIONS"))
response.EndRequest();
if (request.GetHeader("Content-Type") == null || !request.GetHeader("Content-Type").Equals(MimeTypes.Json))
throw new HttpError((int)HttpStatusCode.BadRequest, "Bad request", "Expected a Content-Type header with an application/json value but found none. See http://docsdomain.com/ for any required headers.");
});
Bizim son kullanıcıların büyük çoğunluğu JSON tercih edecektir, biz doğrulama XML organları aynı tür uygulamaya rahatsız etmez görerek, JSON şema kullanarak herhangi istek gövdelerini doğrulayarak ve edilmektedir. GlobalRespnoseFilter'ım için 'request.ResponseContentType = MimeTypes.Json;' ekledim. Ancak, PreRequestest filtresimde bir HttpError atarsam, GlobalResponseFilter asla çalıştırılmaz. Bu yüzden yanıtımdaki aynı İçerik Uzunluğu ve İçerik Türü'nü almaya devam ediyorum. "Zorla" İçerik türünü PreRequestestFilter içine eklerseniz, hizmetimin parametrelerinin özellikleri sıfırdır. – jk1990
Sadece cevabınızı okudum ve fark ettim ki, Global ** İstek ** Filtresini yazdınız :) Ama GlobalRequestFilter yerine GlobalResponseFilter satırını ekledikten sonra, sonuç aynı – jk1990
Düzenleme: Tam olarak ** aynı ** :// (ve tabii ki uygulama/json) dışındaki bir Accept üstbilgi değeriyle yapılan tüm istekler artık beklenen ResponseStatus hatası ile yanıt verir. Ancak, son kullanıcılarımızın API'mızı denemek için Postman'ı kullanacağını ve Postman'ın varsayılan Accept başlığının / olduğundan, henüz% 100 çözülmediğini umuyoruz. Ps .: = * –
jk1990