当前位置: 首页 > 知识库问答 >
问题:

发送BadRequest(ModelState)时,Postman中的“无法获取任何响应”,而不是XML格式的ModelState错误

华福
2023-03-14

原谅我的无知,这是我第一次尝试 ASP.Net 核心WebAPI。我正在使用阿斯普网核心.MVC 1.1.4,以防万一。我正在使用邮递员来测试我的API。

我有一个简单的HttpPost,它发回了预期的400个错误请求。对于这个测试,我发送了格式错误的XML,所以我的主机消息无法正确反序列化。客户希望以XML发送和接收的所有消息。

[HttpPost("Message")]
public IActionResult ReceiveMessage([FromBody] HostMessage hostMessage)
{
    if (hostMessage == null)
    {
        return BadRequest();
    }
    return Ok();
}

[HttpPost("Message")]
public IActionResult ReceiveMessage([FromBody] HostMessage hostMessage)
{
    if (hostMessage == null)
    {
        return BadRequest(ModelState);
    }
    return Ok();
}

我期望获得状态为400的错误请求,并在模型状态中发现异常(反序列化对象时出现错误),但我得到的是“无法获得任何响应”

所以问题是,为什么当我将ModelState添加到错误请求时,它不再返回带有错误的预期错误请求,而只是说它无法获得任何响应。

发布前编辑?好吧,写这篇文章的时候想出来了。客户机需要XML格式的一切。我的配置服务是这样设置的。

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc()
        .AddMvcOptions(x => x.InputFormatters.Insert(0, new XmlDataContractSerializerInputFormatter()))
        .AddMvcOptions(x => x.OutputFormatters.Insert(0, new XmlDataContractSerializerOutputFormatter()));
}

所以我更新了我的问题标题,现在问我如何以XML返回预期的ModelState错误。

共有1个答案

景承教
2023-03-14

要回答如何获得该错误消息的具体问题,您需要向下遍历< code > modelstatedidictionary 对象,直到< code>Errors异常集合,并获得第一个异常的消息,如图中的对象树所示。

如果这是您想要的,我建议您创建一个< code > modelstatedidictionary 的扩展方法来为您执行搜索并返回您想要的消息。假设这是您从ModelState中想要的全部,并且您可能想要多个消息(如果它们存在的话),我会尝试这样做:

    public static List<string> FindErrors(this ModelStateDictionary modelState)
    {
        List<string> errors = new List<string>();
        foreach (var value in modelState.Values)
        {
            foreach(var error in value.Errors)
            {
                if (!string.IsNullOrWhiteSpace(error.ErrorMessage))
                    errors.Add(error.ErrorMessage);

                if (error.Exception != null)
                    errors.Add(error.Exception.ToString()); // The ToString method gets the message you were looking for in this example
            }
        }

        return errors;
    }

然后像这样使用:返回错误请求(模型状态。.

如果异常消息确实是您想要的,那么这应该可以获得所需的内容。

 类似资料:
  • 我正在使用postman来测试我有的API,当请求不包含子域时一切都很好,然而当我将子域添加到URL时,我得到的是这个响应。 代理配置错误确保在“设置”>“代理”中正确配置代理 请求超时:在“设置”>“常规”中更改请求超时 如果我从postman复制相同的URL并将其粘贴到浏览器中,我会得到正确的响应,是否有某种配置我应该做使postman与子域一起工作?

  • 我用邮递员寄出这个请求https://postman-echo.com/get?record=aaaa 测试包含以下代码: 控制台中的输出: 对象对象 我所期待的:回应json {“args”:{“record”:“aaaa”},“headers”:{“x-forwarded-proto”:“https”,“x-forwarded-port”:“443”,“host”:“postman echo.

  • 我试图使用ASP. NET MVC 4和MongoDB创建一个基本的电影数据库。我的问题是在我的电影控制器的POST更新方法。 ModelState包含电影的Id字段(这是一个ObjectId对象)的错误,并抛出以下异常: 这是更新视图: 还有模特的电影课: 编辑:解决方案我将[脚手架列(假)]添加到id中,这样浏览器就不会试图呈现它。然而,我仍然需要实现Mihai提供的解决方案,以便通过正确的I

  • 我在桌面上安装了邮递员的本机应用程序(邮递员版本5.5.0)。现在,当我发送简单的肥皂请求时,将显示“无法获得任何响应”消息。当我在以前的邮递员chrome扩展中发送相同的请求时,我得到了预期的响应。请帮忙。提前致谢。

  • 我使用了Web API控制器中的IActionResult和邮递员的加热方法,我的功能正在工作,但没有得到成功响应。我的代码是: Postman中的响应是:无法获得任何响应连接到https://localhost:44303/api/pousada/markasinactive时出错。可能发生这种情况的原因:服务器无法发送响应:确保后端正常工作自签名SSL证书被阻止:通过关闭设置>常规代理配置错误

  • 无法得到任何回应 连接到http://subdomain.localhost:port/api/时出错 为什么会发生这种情况: 如果我从postman复制相同的URL并将其粘贴到浏览器中,我会得到适当的响应,是否应该进行某种配置来使postman与子域一起工作?