更改响应头编码.Net Core

4
我需要帮助更改 .Net Core 1.1 响应头的编码。
我们正在开发一个应用程序,并创建了一个名为“X-Application-Error”的自定义标头,其中在应用程序后端发生任何错误时返回响应代码 500 和消息。这样,我使用“app.UseExceptionHandler”捕获错误,将其放入标头中,如果前端接收到响应代码 500,则显示发送到标头的消息。
这正如预期的那样工作,我遇到的问题是,我需要发送像“é”,“ã”和其他字符一样的字符,而标头的默认编码是 UTF-8,因此它不会显示这些字符。
在 .net 框架中,我们可以使用“HttpResponse.HeaderEncoding”属性来更改它(https://msdn.microsoft.com/en-us/library/system.web.httpresponse.headerencoding(v=vs.110).aspx),但我找不到相当于 .Net Core(1.1)的属性。

我在这里找到了一个类似的问题(C# WebClient 非英语请求头值编码),但是也没有答案。


1
这些字符在UTF-8编码表中。 - SpruceMoose
1个回答

1

好的,我已经找到了一个解决方法(对我来说现在似乎很明显)。

从我的理解来看,如果未编码,.Net Core不允许像“á”、“ã”这样的字符出现在标题中。因此,我只需使用“WebUtility.UrlEncode(string)”进行编码并发送消息。在前端,Angular会自动解码消息。代码如下:

app.UseExceptionHandler(
          builder =>
          {
              builder.Run(
                async context =>
                {
 //Some validations I make

                    context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

                    var error = context.Features.Get<IExceptionHandlerFeature>();
                    if (error != null)
                    {
                        try
                        {
                            context.Response.Headers.Add("Application-Error", WebUtility.UrlEncode(error.Error.Message));
                        }catch(Exception e)
                        {
                            context.Response.Headers.Add("Application-Error", e.Message);
                        }

                        //the rest of the code
                    }
                });
          });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接