我的中有一个自定义中间件.NET Core 3.1应用程序,并try 如下设置响应状态代码和正文:

public async Task Invoke(HttpContext context)
{
    if ( <some condition on context.Request> )
    {
        context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
        await context.Response.WriteAsync("my custom message");

        // Bad request, do not call next middleware.
        return;
    }

    // Call next middleware.
    await _requestDelegate(context);
}

使用上述代码,状态代码设置正确,但响应正文为空.如何将自定义消息写入正文?

Update1:

增加了await,但这并不能解决问题.感谢Jonesopolis提到这一点.

Update 2

所以我在大摇大摆地测试响应(我也在查看开发人员的网络选项卡).然而,当我在《postman 》中测试时,我得到了预期的回复.

所以,真正的问题是,为什么响应主体没有出现在"招摇过市/网络"选项卡中?

谢谢

推荐答案

SwaggerUI正在使用请求so ASP设置接受:text/plain标头.NET Core正在忽略任何未设置为此类型的内容.

更改代码:

public async Task Invoke(HttpContext context)
{
    if (xxxx)
    {
        context.Response.StatusCode = (int)HttpStatusCode.BadRequest;
        context.Response.ContentType = "text/plain";   //add this line.....

        await context.Response.WriteAsync("my custom message");
        return;
    }
    await _requestDelegate(context);
        
}

Csharp相关问答推荐

不仅仅是一个简单的自定义按钮

在FilePath中搜索一个词,并根据First Match从左到右提取文件路径

在C#中使用类中的对象值

为什么任务需要在内部使用ManualResetEventSlim?

有没有办法在WPF文本框中添加复制事件的处理程序?

使用HttpResponseMessage中的嵌套列表初始化JSON

单行上的ReSharper数据标注

CS1660无法将lambda表达式转换为类型INavigationBase,因为它不是委托类型

NET8 MAUI并部署到真实设备上进行测试

ASP.NET Core MVC将值从视图传递到控制器时出现问题

带有列表参数的表达式树

在C#中有没有办法减少大型数组中新字符串的分配?

RCL在毛伊岛应用程序和Blazor服务器应用程序.Net 8.0中使用页面

Xamarin Forms应用程序中登录页面的用户名和密码编辑文本之间不需要的空格

在Unity C#中按键点击错误的参数

ASP.NET核心中的授权,如何在DbContext启动之前提供租用ID

无法使用直接URL通过PictureBox.ImageLocation加载图像

如何在C#中用Serilog记录类路径、方法名和行编号

使用ImmutableList时,DynamicData未按预期工作

MudBlazor MudTabs-->;选项卡内容高度