मुझे लगता है कि एक कार्रवाई पर एक जोरदार टाइप किया वस्तु लौटा रहा है एक ASP.NET वेब एपीआई नियंत्रक बनाया है, इस प्रकार है:बदलें प्रतिक्रिया हेडर पर ASP.NET वेब एपीआई के लिए मीडिया प्रकार फ़ॉर्मेटर
// GET api/iosdevices/5
public iOSDevice Get(string id) {
return new iOSDevice();
}
मैं बनाया है एक BufferedMediaTypeFormatter प्रकार iOSDevice को संभालने के लिए:
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();
}
}
मेरे समस्या जब मैं प्रकार पकड़ने "text/html", प्रतिक्रिया प्रकार है "पाठ (जैसे किसी व्यक्ति द्वारा अपने वेब ब्राउज़र से API एक्सेस करने का प्रयास करता है) कर रहा है/एचटीएमएल "के बजाय" एप्लिकेशन/एक्सएमएल "। मैं प्रतिक्रिया प्रकार को ओवरराइड करना चाहता हूं ताकि उपयोगकर्ता को "टेक्स्ट/एचटीएमएल" के बजाय "एप्लिकेशन/एक्सएमएल" प्रतिक्रिया मिल सके।
मैं एपीकंट्रोलर प्रकार में नियमित एमवीसी नियंत्रकों पर "प्रतिक्रिया" संपत्ति तक पहुंच प्राप्त नहीं कर सकता हूं और मुझे नुकसान हुआ है। मैं इस प्रकार की प्रतिक्रिया के लिए प्रतिक्रिया प्रकार को कैसे ओवरराइड कर सकता हूं जिसे मीडिया प्रकार फ़ॉर्मेटर द्वारा नियंत्रित किया जा रहा है?
संपादित करें: उपयोगी नोट
मैं इस पहले से कोशिश कर रहा था:
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;
और यह दावा किया मैं गया था "दुरुपयोग" हेडर।
लेकिन जब मैंने सीधे सामग्री सेट करने के नीचे फिलिप का उदाहरण इस्तेमाल किया, तो यह काम किया!
var response = Request.CreateResponse();
response.Content = new ObjectContent<iOSDevice>(device, new iOSDeviceXmlFormatter());
return response;
सामग्री प्रकार प्रतिक्रिया नहीं है हेडर, यह एक पेलोड हेडर है। तो आप प्रतिक्रिया कर सकते हैं। सामग्री। हेडर। सामग्री टिप = ... –