我需要编写一个Web API方法,将结果作为CSS纯文本返回,而不是默认的XML或JSON,是否需要使用特定的提供程序?
我尝试使用ContentResult类(http://msdn.microsoft.com/en-us/library/system.web.mvc.contentresult(v=vs.108).aspx),但没有运气。
由于
答案 0 :(得分:4)
您应该绕过内容协商,这意味着您应该直接返回HttpResponseMessage
的新实例并自行设置内容和内容类型:
return new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StringContent(".hiddenView { display: none; }", Encoding.UTF8, "text/css")
};
答案 1 :(得分:0)
使用答案here作为灵感。你应该可以做一些简单的事情:
public HttpResponseMessage Get()
{
string css = @"h1.basic {font-size: 1.3em;padding: 5px;color: #abcdef;background: #123456;border-bottom: 3px solid #123456;margin: 0 0 4px 0;text-align: center;}";
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StringContent(css, Encoding.UTF8, "text/css");
return response;
}
答案 2 :(得分:0)
您可以返回HttpResponseMessage,获取文件并返回流吗?像这样的东西似乎有用......
public HttpResponseMessage Get(int id)
{
var dir = HttpContext.Current.Server.MapPath("~/content/site.css"); //location of the template file
var stream = new FileStream(dir, FileMode.Open);
var response = new HttpResponseMessage
{
StatusCode = HttpStatusCode.OK,
Content = new StreamContent(stream)
};
return response;
}
虽然如果文件不存在,我会在那里添加一些错误检查......
答案 3 :(得分:0)
只是为了好玩,这里有一个可以在自主机下运行的版本,假设您将.css存储为与控制器位于同一文件夹中的嵌入式文件。将它存储在解决方案的文件中是很好的,因为你得到了所有的VS intellisense。我添加了一些缓存,因为这个资源可能不会发生太大变化。
public HttpResponseMessage Get(int id)
{
var stream = GetType().Assembly.GetManifestResourceStream(GetType(),"site.css");
var cacheControlHeader = new CacheControlHeaderValue { MaxAge= new TimeSpan(1,0,0)};
var response = new HttpResponseMessage
{
StatusCode = HttpStatusCode.OK,
CacheControl = cacheControlHeader,
Content = new StreamContent(stream, Encoding.UTF8, "text/css" )
};
return response;
}
答案 4 :(得分:0)
对于任何使用 AspNet Core WebApi 的人,您都可以这样做
[HttpGet("custom.css")]
public IActionResult GetCustomCss()
{
var customCss = ".my-class { color: #fff }";
return Content(customCss, "text/css");
}