mar*_*kti 5 csv asp.net json asp.net-mvc-4 asp.net-web-api
我已经实现了一个自定义媒体格式化程序,当客户端专门请求"csv"格式时它很有用.
我用这段代码测试了我的api控制器:
HttpClient client = new HttpClient();
// Add the Accept header
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/csv"));
Run Code Online (Sandbox Code Playgroud)
但是,当我从Web浏览器打开相同的URL时,它返回JSON而不是CSV.这可能是由于标准ASP.NET WebAPI配置将JSON设置为默认媒体格式化程序,除非调用者另有指定.我希望在我拥有的每个其他Web服务上都有此默认行为,但不是在返回CSV的单个操作上.我希望默认的媒体处理程序是我实现的CSV处理程序.如何配置Controller的端点,使其默认返回CSV,并且只有在客户端请求时才返回JSON/XML?
您使用的是哪个版本的 Web API?
如果您使用的是5.0版本,您可以使用新的IHttpActionResult基于逻辑,如下所示:
public IHttpActionResult Get()
{
MyData someData = new MyData();
// creating a new list here as I would like CSVFormatter to come first. This way the DefaultContentNegotiator
// will behave as before where it can consider CSVFormatter to be the default one.
List<MediaTypeFormatter> respFormatters = new List<MediaTypeFormatter>();
respFormatters.Add(new MyCsvFormatter());
respFormatters.AddRange(Configuration.Formatters);
return new NegotiatedContentResult<MyData>(HttpStatusCode.OK, someData,
Configuration.Services.GetContentNegotiator(), Request, respFormatters);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是4.0Web API 版本,那么您可以执行以下操作:
public HttpResponseMessage Get()
{
MyData someData = new MyData();
HttpResponseMessage response = new HttpResponseMessage();
List<MediaTypeFormatter> respFormatters = new List<MediaTypeFormatter>();
respFormatters.Add(new MyCsvFormatter());
respFormatters.AddRange(Configuration.Formatters);
IContentNegotiator negotiator = Configuration.Services.GetContentNegotiator();
ContentNegotiationResult negotiationResult = negotiator.Negotiate(typeof(MyData), Request, respFormatters);
if (negotiationResult.Formatter == null)
{
response.StatusCode = HttpStatusCode.NotAcceptable;
return response;
}
response.Content = new ObjectContent<MyData>(someData, negotiationResult.Formatter, negotiationResult.MediaType);
return response;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1454 次 |
| 最近记录: |