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

在webapi中设置状态代码和内容

西门高歌
2023-03-14

我想要得到一个漂亮而简单的带有设置状态代码的API,并获得swagger(swashbuckle)的文档

首先,我的控制器是这样的:

public class ValuesController : ControllerBase
{
    [SwaggerResponse(HttpStatusCode.OK, Type = typeof(List<Value>))]
    [HttpGet, System.Web.Mvc.Route("api/values/")]
    public async Task<List<Value>> GetValues(HttpRequestMessage request)
    {
        using (DatabaseContext context = new DatabaseContext())
        {
            return await context.Values.Take(10).ToListAsync();
        }
    }
}

很好,Swagger显示了JSON格式的结果。问题是,我不能设置状态代码(比如,如果database-error我可以设置为err500或s.th.)。

null

null

public class ValuesController : ControllerBase
{
    [SwaggerResponse(HttpStatusCode.OK, Type = typeof(HttpResponseMessage))]
    [HttpGet, System.Web.Mvc.Route("api/values/")]
    public async Task<HttpResponseMessage> GetValues(HttpRequestMessage request)
    {
        using (DatabaseContext context = new DatabaseContext())
        {
            var valuesToReturn = await context.Values.Take(10).ToListAsync();
            return request.CreateResponse(HttpStatusCode.NotModified, valuesToReturn);
        }
    }
}

现在,状态代码设置正确,但swagger没有显示任何结果。

所以,我想这可能是个大摇大摆的问题。

下一步是用Chromes Boomerang-Plugin测试API,但是相同:Status-Code是304,但是正文(result/content)是空的:

关于如何用HTTPressonSemessage正确设置正文有什么想法吗?或者,当返回值为 /code>时,如何在api-method中设置状态代码?

共有3个答案

孟自强
2023-03-14
var valuesToReturn = new List<string>();
valuesToReturn.Add("test01");
var res = new HttpResponseMessage()
{
    Content = new StringContent(JsonConvert.SerializeObject(valuesToReturn), Encoding.UTF8, "application/json"),
    StatusCode = HttpStatusCode.Redirect
};
return res;
闽朝
2023-03-14

Rawitas Krungkaews的回答部分是正确的。

但是,您应该使用泛型 而不是 :

var res = new HttpResponseMessage()
{
    Content = new ObjectContent<List<Value>>(valuesToReturn, DefaultJsonFormatter),
    StatusCode = HttpStatusCode.Redirect
};
return res;

参数 是MediaTypeFormatter。我认为你可以像这样在你的类中声明它:

private static readonly MediaTypeFormatter DefaultJsonFormatter 
    = new JsonMediaTypeFormatter();
卓胜
2023-03-14

首先,HTTP状态代码304没有正文。304响应不能包含message-body,因此总是由头字段之后的第一个空行终止。

只要更改状态代码。

 类似资料:
  • 问题内容: 我有一个API调用,我需要对其进行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过适当的凭据,则需要返回401状态。如果他们尚未发送受支持的请求格式,则需要返回400状态。 因为它是一个API,所以我真正想做的就是设置响应状态并以一条简单的愚蠢消息退出,该消息说明请求失败的原因(可能使用)。刚好足以完成工作,但我还无法使其正常工作。我

  • 我创建了一个GET服务来重定向到使用POST的网页。我正在尝试使用,因为有了它,我可以发送请求服务的正文和标头,并且我已经实现了从服务中获取我需要的信息。 然而,我需要重定向到具有POST服务的服务器,但我不能,因为我不知道如何设置状态代码,我将其重定向到另一台服务器。 这些是我正在使用的函数:

  • 我正在处理WebAPI 2中的一个服务,endpoint当前返回一个<code>IHttpActionResult<code>。我想返回一个状态代码,但由于它不在枚举中,我不知道如何发送它,因为所有构造函数都需要一个参数 目前,我正在返回<code>BadResult(消息),但返回<code>422

  • 我们在前端使用OpenWeb js库,它们需要.NET中间层在发生某些类型的错误时向它们发送特定的HTTP头状态代码。我试图做到这一点: 它有点半途而废。看截图:http状态码 http://zerogravpro.com/temp/pic.png 请注意,我在响应标头中实现了状态码400,但我确实需要请求标头中的400。相反,我得到了“200 OK”。我如何实现这一点? 我用于进行调用的 URL

  • 首先,我尝试检查用户的id是否与DB中的ID匹配。如果是这样,那么为和设置一个新状态,但我收到以下警告

  • 我试图在promise的内设置状态,但状态值未保存,在then()外无法访问。 以下是更新后的代码: 如果我我得到一个值。但是,如果我console.log在那么()块,我得到正确的值。在这种情况下如何设置状态? 更新的说明: 为了给整个逻辑提供更好的上下文:我使用了一个GooglePlacesAutoComplete组件,它允许用户从下拉列表中选择一个位置。当用户从下拉列表中选择位置时,将调用上