【ASP.Net】 web api中的media type

1. 有什么用?

通常用来标识http请求中的内容的类型用来告诉server端如何解析client端发送的message, 或者标识client希望从server端得到的资源是什么样的类型。又被称为MIME type。

2. 怎么用?

media-type一般被放在header里面。比如一个http请求中:

HTTP/1.1 200 OK
Content-Length: 95267
Content-Type: image/png

Accept: text/html,application/xhtml+xml,application/xml

 server端在接收到请求后会根据请求中的type类型进行序列化&反序列化message。

3. 如何定义server端的media type format?

server端有build-in的media type比如:xml, json,bson等, 同时也可以自定义type。只需要继承MediaTypeFormatterBufferedMediaTypeFormatter

可以通过此链接去看如何创建一个自定义的CSV media type。

4. 如何移除一种format?

void ConfigureApi(HttpConfiguration config)
{
    // Remove the JSON formatter
    config.Formatters.Remove(config.Formatters.JsonFormatter);

    // or

    // Remove the XML formatter
    config.Formatters.Remove(config.Formatters.XmlFormatter);
}

 5. 使用单元测试用例测试你定义的format是否可用?

下面的栗子可以保证你在没有相对应的action或者Controller的情况下测试你的format。code来自msdn

string Serialize<T>(MediaTypeFormatter formatter, T value)
{
    // Create a dummy HTTP Content.
    Stream stream = new MemoryStream();
    var content = new StreamContent(stream);
    /// Serialize the object.
    formatter.WriteToStreamAsync(typeof(T), value, stream, content, null).Wait();
    // Read the serialized string.
    stream.Position = 0;
    return content.ReadAsStringAsync().Result;
}

T Deserialize<T>(MediaTypeFormatter formatter, string str) where T : class
{
    // Write the serialized string to a memory stream.
    Stream stream = new MemoryStream();
    StreamWriter writer = new StreamWriter(stream);
    writer.Write(str);
    writer.Flush();
    stream.Position = 0;
    // Deserialize to an object of type T
    return formatter.ReadFromStreamAsync(typeof(T), stream, null, null).Result as T;
}

// Example of use
void TestSerialization()
{
    var value = new Person() { Name = "Alice", Age = 23 };

    var xml = new XmlMediaTypeFormatter();
    string str = Serialize(xml, value);

    var json = new JsonMediaTypeFormatter();
    str = Serialize(json, value);

    // Round trip
    Person person2 = Deserialize<Person>(json, str);
}

 

posted @ 2018-09-17 16:56  YanyuWu  阅读(634)  评论(0)    收藏  举报