ASP.NET Web API için Medya Türü Formatter tarih:Değişim Yanıt Başlıkları aşağıdaki gibi ben, bir eylem üzerinde kesinlikle yazılı bir nesne döndürüyor bir ASP.NET web API denetleyicisi yarattık
// GET api/iosdevices/5
public iOSDevice Get(string id) {
return new iOSDevice();
}
ben yarattık bir BufferedMediaTypeFormatter tipi iOSDevice işlemek için: Ben türünü yakalamak zaman
public class iOSDeviceXmlFormatter : BufferedMediaTypeFormatter
{
public iOSDeviceXmlFormatter() {
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/xml"));
SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/xml"));
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
public override void WriteToStream(Type type, object value, Stream writeStream, HttpContent content) {
content.Headers.ContentType = new MediaTypeHeaderValue("application/xml");
iOSDevice device = (iOSDevice)value;
using (XmlWriter writer = XmlWriter.Create(writeStream)) {
writer.WriteStartElement("iOSDevice");
if (device.identifierForVendor != Guid.Empty) {
writer.WriteElementString("identifierForVendor", device.identifierForVendor.ToString());
writer.WriteElementString("userInterfaceIdiom", device.userInterfaceIdiom);
writer.WriteElementString("systemName", device.systemName);
writer.WriteElementString("systemVersion", device.systemVersion);
writer.WriteElementString("model", device.model);
}
writer.WriteEndElement();
}
writeStream.Close();
}
}
Benim sorunum "text/html", tepki türüdür "metni (örn birisi kendi web tarayıcınızın gelen API erişmeye çalıştığında) olduğu/html "yerine" application/xml ". Yanıt türünü geçersiz kılmak istiyorum, böylece kullanıcı "text/html" yerine "application/xml" şeklinde bir yanıt alır.
ApiController türünde normal MVC denetleyicilerinde bulunan "Response" özelliğine erişemiyorum ve ben bir kayıp yaşıyorum. Medya türü biçimlendirici tarafından işlenen bu eylemin yanıt türünü nasıl geçersiz kılarım?
DÜZENLEME:
var response = Request.CreateResponse<iOSDevice>(HttpStatusCode.Accepted, device);
response.Headers.Remove("Content-Type");
response.Headers.Add("Content-Type", "application/xml; charset=utf-8");
return response;
Ve ben başlıklarını "kötüye" olduğunu iddia: YARARLI NOT
Bu konuya daha önce çalışıyordu.
Ancak Filip’in İçeriği doğrudan belirleme örneğini kullandığımda, işe yaradı!
var response = Request.CreateResponse();
response.Content = new ObjectContent<iOSDevice>(device, new iOSDeviceXmlFormatter());
return response;
ContentType bir yanıt değil başlık, bu bir faydalı başlıktır. Bu yüzden cevap verebilirsiniz.Kontum.Headers.ContentType = ... –