有没有办法强制ASP.NET Web API返回纯文本?
我需要从ASP.NET Web API控制器以纯文本形式返回响应。
我试过用Accept: text/plain
做一个请求,但它似乎没有办法。 此外,该请求是外部的,并且不在我的控制之下。 我会完成的是模仿旧的ASP.NET方式:
context.Response.ContentType = "text/plain";
context.Response.Write("some text);
有任何想法吗?
编辑,解决方案:基于Aliostad的回答,我添加了WebAPIContrib文本格式化程序,并将其初始化为Application_Start:
config.Formatters.Add(new PlainTextFormatter());
和我的控制器结束了这样的事情:
[HttpGet, HttpPost]
public HttpResponseMessage GetPlainText()
{
return ControllerContext.Request.CreateResponse(HttpStatusCode.OK, "Test data", "text/plain");
}
嗯......我不认为你需要创建一个自定义格式化程序来完成这项工作。 而是像这样返回内容:
[HttpGet]
public HttpResponseMessage HelloWorld()
{
string result = "Hello world! Time is: " + DateTime.Now;
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(result, System.Text.Encoding.UTF8, "text/plain");
return resp;
}
这适用于我而不使用自定义格式器。
如果您明确要创建输出并覆盖基于Accept头的默认内容协商,则不会希望使用Request.CreateResponse()
因为它会强制使用MIME类型。
而应明确创建一个新的HttpResponseMessage
并手动分配内容。 上面的例子使用了StringContent
但还有很多其他的内容类可用于从各种.NET数据类型/结构中返回数据。
HttpContext.Current
成为一种责任。 httpResponseMessage.Headers
上的内容类型标题为您的控制器中的text/plain
来强制执行它,前提是您已注册纯文本格式化程序。 如果你只是寻找一个简单的普通/文本格式化程序而不添加额外的依赖关系,这应该可以做到。
public class TextPlainFormatter : MediaTypeFormatter
{
public TextPlainFormatter()
{
this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
}
public override bool CanWriteType(Type type)
{
return type == typeof(string);
}
public override bool CanReadType(Type type)
{
return type == typeof(string);
}
public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext)
{
return Task.Factory.StartNew(() => {
StreamWriter writer = new StreamWriter(stream);
writer.Write(value);
writer.Flush();
});
}
public override Task<object> ReadFromStreamAsync(Type type, Stream stream, HttpContentHeaders contentHeaders, IFormatterLogger formatterLogger)
{
return Task.Factory.StartNew(() => {
StreamReader reader = new StreamReader(stream);
return (object)reader.ReadToEnd();
});
}
}
不要忘记将其添加到您的Global web api配置中。
config.Formatters.Add(new TextPlainFormatter());
现在你可以传递字符串对象
this.Request.CreateResponse(HttpStatusCode.OK, "some text", "text/plain");
链接地址: http://www.djcxy.com/p/20547.html
上一篇: Is there a way to force ASP.NET Web API to return plain text?