具有特定内容类型的 REST 请求

发布于 2024-11-15 12:57:26 字数 661 浏览 2 评论 0原文

自从此问题以来,我在 WP7 上成功使用了 Spring.net Rest。

我的 REST 服务需要特定的内容类型。我尝试使用另一个请求拦截器,但 XElementHttpMessageConverter 覆盖了内容类型。

public MyClient(string baseAddress)
{
    restTemplate = new RestTemplate(baseAddress);
    //restTemplate.RequestInterceptors.Add(new NoCacheRequestInterceptor());
    restTemplate.MessageConverters.Add(new XElementHttpMessageConverter());
}

public MyObject GetMyObject(int id)
{
    XElement element = restTemplate.GetForObject<XElement>("path/{id}", id);
    //..
    return myObject;
}

// more methods

I'm successfully using Spring.net Rest on WP7 since this issue.

My REST service requires a specific content type. I tried to used another request interceptor but XElementHttpMessageConverter overrides the content type.

public MyClient(string baseAddress)
{
    restTemplate = new RestTemplate(baseAddress);
    //restTemplate.RequestInterceptors.Add(new NoCacheRequestInterceptor());
    restTemplate.MessageConverters.Add(new XElementHttpMessageConverter());
}

public MyObject GetMyObject(int id)
{
    XElement element = restTemplate.GetForObject<XElement>("path/{id}", id);
    //..
    return myObject;
}

// more methods

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

山人契 2024-11-22 12:57:26

最好的方法是使用“SupportedMediaTypes”属性配置转换器:

public MyClient(string baseAddress)
{
    restTemplate = new RestTemplate(baseAddress);
    //restTemplate.RequestInterceptors.Add(new NoCacheRequestInterceptor());

    XElementHttpMessageConverter linqXmlConverter = new XElementHttpMessageConverter ();
    linqXmlConverter.SupportedMediaTypes = new MediaType[] { MediaType.Parse("type/subtype") };
    restTemplate.MessageConverters.Add(linqXmlConverter );
}

顺便说一句,您也可以使用拦截器来完成此操作,但不能使用拦截请求创建的“IClientHttpRequestFactoryInterceptor”。
您应该使用“IClientHttpRequestBeforeInterceptor”来拦截请求执行。

The best way here to do that is to configure your converter with the "SupportedMediaTypes" property :

public MyClient(string baseAddress)
{
    restTemplate = new RestTemplate(baseAddress);
    //restTemplate.RequestInterceptors.Add(new NoCacheRequestInterceptor());

    XElementHttpMessageConverter linqXmlConverter = new XElementHttpMessageConverter ();
    linqXmlConverter.SupportedMediaTypes = new MediaType[] { MediaType.Parse("type/subtype") };
    restTemplate.MessageConverters.Add(linqXmlConverter );
}

Btw, you could do that with an interceptor too but not with the "IClientHttpRequestFactoryInterceptor" that intercepts request creation.
You should use instead "IClientHttpRequestBeforeInterceptor" that intercepts request execution.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文