首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从netcoreapp3.1控制器动作返回css或404

从netcoreapp3.1控制器动作返回css或404
EN

Stack Overflow用户
提问于 2022-09-21 10:26:59
回答 1查看 28关注 0票数 -1

我想让控制器动作返回css。

只有当响应类型为text/css时,浏览器才会使用CSS。

这是我的行动。

代码语言:javascript
复制
        [HttpGet("{tenant}/stylesheet")]
        [Produces("text/css")]
        [ProducesResponseType(typeof(string), StatusCodes.Status200OK)]
        [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)]
        public async Task<ActionResult<BrandingDTO>> Stylesheet(string tenant)
        {
            Branding b = dbContext.Branding.SingleOrDefault(z => z.Tenant == tenant);
            if (t == null)
            {
                return NotFound(); // Actually returns 406 unacceptable.
            }

            return Ok(Content($@"
nav.navbar {{
    background-color: {b.PrimaryBrandingColour};             
}}
", "text/css"));
        }

在“找不到”的情况下,我不需要响应为application/problem+json,但事实恰好是这样的。

我不得不创建一个自定义输出格式化程序。

代码语言:javascript
复制
    /// <summary>
    /// https://learn.microsoft.com/en-us/aspnet/core/web-api/advanced/custom-formatters?view=aspnetcore-6.0
    /// </summary>
    internal class CssOutputFormatter : TextOutputFormatter
    {
        public CssOutputFormatter()
        {
            SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/css"));

            SupportedEncodings.Add(Encoding.UTF8);
            SupportedEncodings.Add(Encoding.Unicode);
        }

        protected override bool CanWriteType(Type? type)
        {
            return type == typeof(ContentResult) || type == typeof(string);
        }

        public override async Task WriteResponseBodyAsync(OutputFormatterWriteContext context, Encoding selectedEncoding)
        {

            string buffer = context.Object.ToString();

            ContentResult content = context.Object as ContentResult;
            if(content != null)
            {
                buffer = content.Content;
            }

            await context.HttpContext.Response.WriteAsync(buffer, selectedEncoding);
        }
    }

问题是,在未找到的情况下,这个响应实际上是406不可接受的;我期望404和text/css类型的空体或application/problem+json类型的非空体。

这个能行吗?或者,我是否应该接受的回应要么是202个与text/css的其他中断?

EN

回答 1

Stack Overflow用户

发布于 2022-09-21 10:53:07

希望这能帮到你。

代码语言:javascript
复制
HttpResponseMessage message=new HttpResponseMessage(HttpStatusCode.OK);
string color = "black";
string content = $"nav.navbar {{background-color: {color};}}";
message.Content=new StringContent(content, System.Text.Encoding.UTF8, "text/plain");
return Ok(message);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73799187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档